2013-09-09 4 views
-3

Когда я пытаюсь разделить маркер этого «(555) 333-444», ниже код не дает желаемого результата. Мне нужна функция для разделения всех этих 555, 333, 444 отдельно. Что может быть моей ошибкой?strtok() не работает должным образом

Выход:

333-444

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

int main(void){ 

char *ptr; 

char tel[]="(555) 333-444"; 

ptr=strtok(tel,"-() "); 

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

} 

getch(); 
} 
+10

False, 'strtok()' работает нормально. Это ваш код, который этого не делает. –

+0

Я забыл добавить скобки и - во втором звонке. Виноват. Извините – Lyrk

+4

Кстати, сейчас самое подходящее время, чтобы удалить вопрос, и вернуть свои шесть очков ;-) – dasblinkenlight

ответ

2

Это:

ptr=strtok(NULL," "); 

Если быть на самом деле:

ptr=strtok(NULL,"-() "); 

Необходимо всегда указывать разделители, которые вы собираетесь использовать в цикле. strtok не будут «запоминать» их.

Или у вас может быть что-то вроде const char* delimiters = "-() "; и просто используйте это каждый раз, когда вы используете strtok с этим набором разделителей (например, ptr = strtok(string, delimiters);).

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