3

我很难弄清楚这一点。我有一个 C 字符串,我想删除它的第一部分。让我们说它:“食物,数量,卡路里”。我想复制这些值中的每一个,但不是逗号。我找到逗号,并将逗号的位置返回给我的方法。然后我用

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

将“theLine”复制到我的数组位置“i”,只有第一个“end”字符(第一次,“end”将是 4,因为那是第一个逗号所在的位置)。但是,因为它在循环中,所以我想从数组中删除“食物”,然后重新执行该过程。但是,我看不到如何删除第一部分(或向前移动数组指针?)并保留其余部分。任何帮助都会很有用!

4

5 回答 5

3

您需要的是用逗号作为分隔符来切断字符串。

您需要 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
于 2010-12-13T04:58:50.387 回答
2

如果必须保留原始字符串,则使用 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);
};
于 2010-12-13T04:37:52.267 回答
0

您可能想要使用的函数是 strtok()

这是一个很好的例子 - http://www.cplusplus.com/reference/clibrary/cstring/strtok/

于 2010-12-13T04:18:55.193 回答
0

就个人而言,我会使用 strtok()。

我不建议从字符串中删除提取的标记。删除部分字符串需要复制剩余的字符,效率不高。

相反,您应该跟踪您的位置并将您想要的部分复制到新字符串中。

但是,我会再次使用 strtok()。

于 2010-12-13T04:21:16.507 回答
0

如果您知道逗号在哪里,则可以从该点开始继续阅读该字符串。

例如

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可能是一个更好的主意。

于 2010-12-13T04:30:58.107 回答