删除C字符串的第一部分

时间:2010-12-13 04:13:44

标签: c arrays string loops cstring

我在解决这个问题上遇到了很多麻烦。我有一个C字符串,我想删除它的第一部分。让我们说:“食物,金额,卡路里”。我想复制出这些值中的每一个,但不是逗号。我找到了逗号,并将逗号的位置返回给我的方法。然后我用

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

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

5 个答案:

答案 0 :(得分: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);
};

答案 1 :(得分:2)

你需要的是用逗号分隔字符串作为分隔符。

你需要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 :(得分:0)

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

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

答案 3 :(得分:0)

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

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

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

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

答案 4 :(得分: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可能是个更好的主意。