Удалить первую часть строки C - PullRequest
2 голосов
/ 13 декабря 2010

У меня много проблем с выяснением этого.У меня есть строка C, и я хочу удалить ее первую часть.Скажем так: «Еда, количество, калории».Я хочу скопировать каждое из этих значений, но не запятые.Я нахожу запятую и возвращаю позицию запятой в мой метод.Затем я использую

strncpy(aLine.field[i], theLine, end);

, чтобы скопировать «theLine» в мой массив в позиции «i», используя только первые символы «end» (в первый раз «end» будет 4, потому чтогде первая запятая).Но затем, поскольку он находится в цикле, я хочу удалить «Еда» из массива и повторить процесс заново.Однако я не вижу, как я могу удалить первую часть (или переместить указатель массива вперед?) И сохранить остальную часть.Любая помощь будет полезна!

Ответы [ 5 ]

2 голосов
/ 13 декабря 2010

Вам нужно отрубить строки с запятой в качестве разделителя.

Вам нужен strtok для этого. Вот пример кода для вас:

int main (int argc, const char * argv[]) {


    char *s = "asdf,1234,qwer";
    char str[15];
    strcpy(str, s);
    printf("\nstr: %s", str);
    char *tok = strtok(str, ",");
    printf("\ntok: %s", tok);
    tok = strtok(NULL, ",");
    printf("\ntok: %s", tok);
    tok = strtok(NULL, ",");
    printf("\ntok: %s", tok);

    return 0;
}

Это даст вам следующий вывод:

str: asdf,1234,qwer
tok: asdf
tok: 1234
tok: qwer
2 голосов
/ 13 декабря 2010

Если вам нужно сохранить исходную строку, то strtok.Если нет, вы можете заменить каждый разделитель на '\0' и напрямую использовать полученные строки:

char s_RO[] = "abc,123,xxxx", *s = s_RO;
while (s){
    char* old_str = s;
    s = strchr(s, ',');
    if (s){
        *s = '\0';
        s++;
    };
    printf("found string %s\n", old_str);
};
0 голосов
/ 13 декабря 2010

Лично я бы использовал strtok ().

Я бы не советовал удалять извлеченные токены из строки.Удаление части строки требует копирования оставшихся символов, что не очень эффективно.

Вместо этого вы должны отслеживать свои позиции и просто копировать нужные разделы в новую строку.

Но, опять же, я бы использовал strtok ().

0 голосов
/ 13 декабря 2010

если вы знаете, где находится запятая, вы можете просто продолжать читать строку с этой точки.

, например

void readTheString(const char *theLine)
{
    const char *wordStart = theLine;
    const char *wordEnd = theLine;

    int i = 0;
    while (*wordStart) // while we haven't reached the null termination character
    {
        while (*wordEnd != ',')
            wordEnd++;
        // ... copy the substring ranging from wordStart to wordEnd
        wordStart = ++wordEnd; // start the next word
    }
}

или что-то в этом роде.
нольпроверка завершения, вероятно, неверна, если строка также не заканчивается на ',' ... но вы все равно поймете.

в любом случае, использование strtok, вероятно, было бы лучше.

0 голосов
/ 13 декабря 2010

Вы можете использовать функцию strtok ()

Вот хороший пример - http://www.cplusplus.com/reference/clibrary/cstring/strtok/

...