2012-06-07 2 views
0

Здесь у меня есть один символ, в котором есть некоторые разделители.Как я могу разделить строки из массива символов

массив символов является char sentence []="abc_12.22.32.42";

Я хочу читать азбуку, 12,22,32,42 из предложения, используя sscanf.

Я пробовал с sscanf, но с его заданным выходом.

Я разместил здесь два кода, один из которых работает нормально.

если я прочитал abc = 12 с %s = %s, то его работы. Почему мы должны выделять пространство между сплиттером.

Любой способ достичь этой цели.

Не работает Код:

#include <stdio.h> 

int main() 
{ 
    char sentence []="abc_12.22.32.42"; 
    char str [20]; 
    char str1 [20]; 
    char str2 [20]; 
    char str3 [20]; 
    sscanf (sentence,"%s_%s.%s.%s.%s",str,str1,str2,str3); 
    printf ("%s --> %s --> %s --> %s --> %s\n",str,str1,str2,str3); 
    return 0; 
} 

Выход:

abc_12.22.32.42--> -- � -->�Tl�s --> (null) 

Ожидаемый результат:

abc --> 12 --> 22 --> 32 --> 42 

работает Код:

/* sscanf example */ 
#include <stdio.h> 

int main() 
{ 
    char sentence []="abc = 12"; 
    char str [20]; 
    char str1 [20]; 
    char str2 [20]; 
    char str3 [20]; 
    if(sscanf(sentence,"%s = %s",str,str1) < 5) ; 
     printf ("%s--> %s\n",str,str1); 
    return 0; 
} 

выход:

abc--> 12 
+0

возможный дубликат [Split строки с разделителями в C] (http://stackoverflow.com/questions/9210528/split-string-with-delimiters-in-c) – dirkgently

ответ

3

При определении формата, как это: %s_%s.%s.%s.%s, ваша программа не может знать, что первая строка не может содержать символы '_' и '.'. Вот почему sscanf(sentence,"%s_%s.%s.%s.%s", str0, str1, str2, str3, str4); заставляет все предложение хранить в str0.

Если Вы хотите остановиться в этом городе sscanf, вы должны изменить формат, который вы ожидаете:

char sentence[] = "abc_12.22.32.42"; 
char str0[20], str1[20], str2[20], str3[20], str4[20]; 
sscanf (sentence,"%19[^_]_%19[^.].%19[^.].%19[^.].%19[^.]", 
     str0, str1, str2, str3, str4); 
printf ("%s --> %s --> %s --> %s --> %s\n", 
     str0, str1, str2, str3, str4); 

%19[^_] вызывает str0 содержать не более 19 символов (20 с '\0') и предотвращает характер '_' стать часть str0. Таким образом, выход будет abc --> 12 --> 22 --> 32 --> 42 по желанию.

В качестве альтернативы вы можете использовать strtok.

0

Заменить '' и '-' на '', также, вам нужен еще один массив Str4

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

int main() 
{ 
    char sentence []="abc_12.22.32.42"; 
    char str [20]; 
    char str1 [20]; 
    char str2 [20]; 
    char str3 [20]; 
    char str4 [20]; 

    int i; 
    for (i=0; i<strlen(sentence); i++) { 
     if (sentence[i] == '_') sentence[i] = ' '; 
     if (sentence[i] == '.') sentence[i] = ' '; 
    } 

    sscanf (sentence,"%s %s %s %s %s",str,str1,str2,str3, str4); 
    printf ("%s--> %s --> %s -->%s --> %s\n",str,str1,str2,str3, str4); 
    return 0; 
} 
1

использование strtok функция. это самый лучший способ разделить струне

strtok example

Смежные вопросы