在C中解析字符串指针 - 疑难解答

时间:2016-03-12 16:38:01

标签: c string-parsing

我是C的新手

我试图通过“空格”和“逗号”解析字符串,*ch指向的字符串,但我只获得第一个元素。不知道我做错了什么,而且我已经浪费了整整一天的时间,但仍然无法理解。

#include <stdio.h>
#include <string.h>

int main(){
        char *ch = "This is a string, and fyunck you.";
        char cmd[100], *temp;
        int i = 0, size_ch = strlen(ch), count = 0;

        /* as strtok only support string array */
        for (i = 0; i < size_ch; i++){
                if (ch[i] != ','){
                        cmd[count] = ch[i];
                        count++;
                }
        }
        cmd[count] = '\0';
        printf("cmd: %s\n", cmd);

        ch = strtok(cmd, " ");
        printf("ch: %s\n", ch);

        while ( (ch = strtok(NULL, " ")) != NULL)
                printf("%s\n", cmd);
}
  

输出

     

cmd:这是一个字符串,你知道吗

     

ch:这个

     

     

     

     

     

     

然而,输出应该是

  

欲望输出

     

cmd:这是一个字符串,你知道吗

     

ch:这个

     

     

     

的字符串

     

     

fyunck

     

注意:我不允许使用外部库。

P.S 我正在尝试复制此代码,Code

2 个答案:

答案 0 :(得分:1)

请注意:

while ((ch = strtok(NULL, " ")) != NULL)
    printf("%s\n", cmd);

您正在更新ch,并输出cmd,但仍保持不变。

要解决此问题,只需将其更改为:

while ((ch = strtok(NULL, " ")) != NULL)
    printf("%s\n", ch);

答案 1 :(得分:1)

你只是在最后一行打印错误的变量。

更改

printf("%s\n", cmd);

printf("%s\n", ch);

它应该没问题。