C - 从字符串的中间开始遍历

时间:2013-01-16 05:27:57

标签: c string

只是仔细检查,因为我一直在混淆C和C ++或C#,但是说我有一个字符串,我正在使用strcspn()进行解析。它返回字符串的长度,直到找到它的第一个分隔符。使用strncpy(仅限C ++还是C中也可用?)我将字符串的第一部分复制到其他地方并使用变量存储我的位置。假设strcspn返回10(所以分隔符是第10个字符)

现在,我的代码做了一些其他的事情,最终我想继续遍历字符串。我是否必须复制字符串的后半部分,然后从头开始调用strncspn()。我可以只做一个指针并将其指向我的字符串的第11个字符并将其传递给strncspn()(我想像char * pos = str [11])?还有其他更简单的东西,我只是错过了吗?

3 个答案:

答案 0 :(得分:0)

你的意思是第10个字符为str[9],第11个为str[10],但是你可以这样做。

请注意,您不能超出字符串的长度并超出分配的内存大小。

听起来您正在执行令牌化,我建议您可以直接使用 strtok ,它会更干净,而且它已经处理了你想做什么(strcspn + strncpy并在分隔符后继续解析)。

答案 1 :(得分:0)

您可以使用strcspn作为第一个参数再次致电(str + 11)。但请确保str的长度大于11

n = strcspn(str, pattern);
while ((n+1) < strlen(str))
{
    n2 = strcspn((str+n), pattern);
    n += n2;
}

注意:使用char *pos = str[11]是错误的。您应该使用类似char *pos = str + 11;

的内容

答案 2 :(得分:0)

您可以获得指向字符串中间位置的指针,而不需要复制字符串的后半部分来执行此操作。

char * offset = str + 10;

char * offset = &str[10];

意思是同样的事情,都做你想做的事。