2016-03-12 2 views
0

Я новичок в CСинтаксический указатель строки в 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: Это строка и fyunck вам

Хорнер: Это

Это

Это

Этот

Это

Это

Это

тогда, вывод должен быть

Желание Выход

CMD: Это строка и fyunck вам

ч: Этот

является

строка

и

fyunck

вы

Примечание: Мне не разрешено использовать внешние библиотеки.

P.S Я пытаюсь скопировать этот код, Code

+1

Последняя строка печатает 'cmd', но я думаю, что вы хотите напечатать' ch'. Вы также можете посмотреть на 'strsep (3)', что немного проще в работе и поддерживает несколько разделителей. – bnaecker

+1

В последнем цикле 'printf ("% s \ n ", cmd);' должен быть 'printf ("% s \ n ", ch);' –

+0

LOL, это сработало .... Не могу поверить, что я потратили весь мой день на эту глупую ошибку. –

ответ

1

Вы просто напечатав неправильную переменную в последней строке.

Изменить

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

в

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

и она должна быть тонкой.

1

ПримечаниеЭтот:

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

Вы обновляете ch и вывод cmd, который остается неизменным.

Чтобы это исправить, просто изменить его на:

while ((ch = strtok(NULL, " ")) != NULL) 
    printf("%s\n", ch); 
Смежные вопросы