我在解决这个问题上遇到了很多麻烦。我有一个C字符串,我想删除它的第一部分。让我们说:“食物,金额,卡路里”。我想复制出这些值中的每一个,但不是逗号。我找到了逗号,并将逗号的位置返回给我的方法。然后我用
strncpy(aLine.field[i], theLine, end);
要将“theLine”复制到位于“i”的数组,只有第一个“结束”字符(第一次,“end”将为4,因为这是第一个逗号所在的位置)。但是,因为它在循环中,我想从数组中删除“食物”,然后再重复这个过程。但是,我看不出如何删除第一部分(或向前移动数组指针?)并保留其余部分。任何帮助都会有用!
答案 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
可能是个更好的主意。