2010-12-28 4 views
0

У меня есть строка, как это:Разбивает строку на # в C

char *message = "12#34#56#78#90" 

Я хочу получить:

a = "12" 
b = "34" 
c = "56" 
d = "78" 
d = "90" 

Кто может дать мне хороший метод?

+1

http://stackoverflow.com/questions/236129/c-how-to-split-a-string показывает вам, как сделать это в C++ –

ответ

8

Использование strtok(). Обратите внимание, что даже если это документация на C++, эта функция также присутствует в C. Обратите особое внимание на использование NULL в последующих вызовах для получения следующего токена.

char label = 'a'; 
char *token = strtok(message, "#"); 
while (token != NULL) { 
    printf("%c = \"%s\"\n", label++, token); 
    token = strtok(NULL, "#"); 
} 

Выходов:

a = "12" 
b = "34" 
c = "56" 
d = "78" 
e = "90" 

См http://ideone.com/xk1uO

+0

Спасибо! еще один вопрос, если я хочу получить «1234567890», как это сделать? – why

+0

@why ['strcat()'] (http://www.cplusplus.com/reference/clibrary/cstring/strcat/) – marcog

+0

Я имею в виду, могу ли я получить «1234567890» от «12 # 34 # 56 # 78 # 90 «прямо? – why

2

Функция strtok в стандартной библиотеке это делает, вы можете перебирает строки выделения всех маркеров.

1

strtok_r его как strtok, но безопаснее. strtok устарел.

1

Давайте использовать strsep - не нужно зависеть от статической переменной, передав в NULL.

char *string; // It holds "12#34#56"; (cannot be string literal) 
char *token = NULL; 

while ((token = strsep(&string, "#"))) { 
    printf("%s\n", token); 
} 
Смежные вопросы