CString проблема с подстрокой - PullRequest
0 голосов
/ 30 мая 2011

У меня проблемы с подстроками, которые я буду реализовывать с помощью файлового ввода-вывода. У меня есть данные char [21], char world [21] и char eat [21], которые будут подстроками char в [300] (имена, между прочим, ничего не значат). Я придумал некоторый код подстроки, и вместо того, чтобы получить нужную подстроку, я получил всю строку и несколько прикольных символов. Может кто-нибудь сказать мне, что я делаю не так, или я просто потянул последние пару часов, и в библиотеке уже есть метод sub-Cstring?

int main()
{
    char in[300] = "w54;d68;n541;"  // this is bigger than it needs to be because its for file i/o
    char world[21], data[21], eat[21];
    int w, d, n, end1, end2, end3;

    for (w = 0; in[w] != 'w'; w++) {
    }

    for (end1 = w; in[end1] != ';'; end1++) {
    }

    d = end1 + 1;

    for (end2 = d; in[end2] != ';'; end2++) {
    }

    n = end2 + 1;

    for (end3 = n; in[end3] != ';'; end3++) {
    }

    int i;

    for (i = w + 1; i < end1; i++) {
      append(world, in[i]);
    }

    for (i = d + 1; i < end2; i++) {
      append(data, in[i]);
    }

    for (i = n + 1; i < end3; i++) {
      append(eat, in[i]);
    }

    cout << "world[21]: " << world << endl << "data[21]: " << data << endl << "eat[21]: " << eat << endl;
}

void append(char *s, char c)
{
    int len = strlen(s);
    s[len] = c;
    s[len + 1] = '\0';
}

и вот моя точка останова (прямо перед возвратом 0) результаты

in  0x0021fbb8 "w54;d68;n541;5468541"   char [300]
end2    7   int
world   0x0021fb98 "ÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌw54;d68;n541;5468541"   char [21]
data    0x0021fb78 "ÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌw54;d68;n541;5468541"   char [21]
eat 0x0021fb58 "ÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌw54;d68;n541;5468541"   char [21]

n   8   int
i   12  int
end3    12  int
w   0   int
end1    3   int

Ответы [ 2 ]

2 голосов
/ 30 мая 2011

Изменение char world[21], data[21], eat[21]; на

char world[21] = {0};
char data[21] = {0};
char eat[21] = {0};

strlen из char world[21] не определено, если оно не инициализировано`

1 голос
/ 30 мая 2011

Ну, у вас есть пара стандартных опций библиотеки

substr (...) -> http://www.cplusplus.com/reference/string/string/substr/

или

strstr (...) ->http://www.cplusplus.com/reference/clibrary/cstring/strstr/

:)

...