复制c中特殊运算符之前/之后的字符
我有一个xxx/yyy格式的值,我使用以下方法提取/复制c中特殊运算符之前/之后的字符,c,string,C,String,我有一个xxx/yyy格式的值,我使用以下方法提取/ char * ptr = "xxx/yyy"; part2 = strchr( ptr, '/'); if ( part2 != NULL) part2++; part1 = strtok(ptr,"/"); 结果:第1部分=xxx 第2部分=yyy 这很好,但是当我有ptr的值,比如/yyy时,我的结果是
char * ptr = "xxx/yyy";
part2 = strchr( ptr, '/');
if ( part2 != NULL)
part2++;
part1 = strtok(ptr,"/");
结果:第1部分=xxx
第2部分=yyy
这很好,但是当我有ptr的值,比如/yyy时,我的结果是
***part1 = yyy !!!!!! IT should be an empty char!!!!***
part2 = yyy
提前感谢strtok函数跳过您在第二个字符串中传递的所有字符。因此,在第一次调用中,您将获得第一个不包含这些字符的字符串。当你需要一个不同的行为时,你应该考虑实现MyStrutok。< P> HARPER已经给出了你用Strutk观察到的行为的解释。幸运的是,您已经完成了strtok在您的案例中所做的工作:您已经找到了斜杠的位置。如果有斜杠,您可以像strtok那样:通过覆盖斜杠以零结束第一个字符串:
int main()
{
char ptr[] = "xxx/yyy";
char *part1, *part2;
part1 = ptr;
part2 = strchr(ptr, '/');
if (part2 != NULL) *part2++ = '\0';
printf("'%s', '%s'\n", part1, part2);
return 0;
}
请注意,输入字符串必须是可修改的,而您的字符串文字不是。它恰好可以在您的平台上修改,但您不应该依赖它;使用字符数组ptr[]而不是指向字符串文本*ptr的指针。在第一种情况下,您的代码将不起作用,因为strtok将标记字符替换为“\0”,从而使strchr返回null。strtok不应用于修改字符串的字符串文本。好主意,实现不好。请先编译并测试代码,然后再发布到这里。您应该根据所需的字符串长度作为字符来分配内存;您要做的是分配空间来容纳指针。您不能以null结尾第一个字符串a。你也不处理没有斜线的情况;您还应该在第一个循环中检查“\0”。此外,由于这是一个自包含程序,您应该释放两个分配的字符串。这应该是一个点/想法,而不是一个现成的代码。但是我会修复它。在我看来,它像C代码,包含适当的include和完整的main,所以应该可以编译。如果您想说明一个想法,请使用伪代码,即该想法的简化表示,乍一看,它显然不是真正的代码。
int main()
{
char ptr[] = "xxx/yyy";
char *part1, *part2;
part1 = ptr;
part2 = strchr(ptr, '/');
if (part2 != NULL) *part2++ = '\0';
printf("'%s', '%s'\n", part1, part2);
return 0;
}