复制c中特殊运算符之前/之后的字符

复制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时,我的结果是

我有一个xxx/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;
}