2016-11-20 1 views
0

J'ai regardé des sujets connexes, essayé quelques exemples et n'ai rien trouvé qui m'aide.séparation de chaîne C

Je prends une chaîne pour l'entrée eg: char str [50] il a le format suivant Retirer 1 1 Supprimer peut être un autre mot qui a une longueur différente le nombre d'entiers pourrait être plus de 2 je besoin chaque une partie de la chaîne à stocker dans différentes variables pour les valeurs numériques int si possible

J'ai essayé avec strcmp stracat strtok strstr mais apparemment je manque quelque chose

char str[] = "Remove 2 3 2"; 
char * pch; 
char split[50]; 
printf("Splitting string \"%s\" into tokens:\n", str); 
pch = strtok(str, " "); 
while (pch != NULL) { 
    printf("%s\n", pch); 
    strcat(split,pch); 
    printf("\nThe string is %s",split); 
    pch = strtok(NULL, " "); 
} 

Ceci est ma dernière tentative. Ce que j'essaye de faire est de supprimer les caractères d'espace, alors probablement je pourrais identifier le mot derrière Retirer par exemple. si c'est supprimer ou c'est un autre mot avec strstr. Mais comment obtenir les valeurs numériques séparées? Et c'est ma sortie comment se débarrasser de ces caractères

The string is ��_o�Remove2 

    The string is ��_o�Remove23 

    The string is ��_o�Remove232 

    The string is ��_o�Remove232 
+0

qui a supprimé les CHARS merci @ user3121023 –

Répondre

0

Comme je vous comprends peut-être voulu chaque composant de chaîne dans une variable séparée, alors pourquoi ne pas utiliser un tableau à la place ??

juste vérifier l'espace et de les ignorer

char str[] = "hi 1 2 3"; 
    char store[100]; 
    int i=0,j=0; 

    for(i = 0,j = 0; i <= strlen(str); i++){ 
     if(str[i] != 32) { // value of space is 32 
       store[j] = str[i]; 
       j++; 
     } 
    } 

    for(i = 0; i < strlen(store); i++){ 
     printf("%c\n",store[i]); 
    } 

sortie:

h 
i 
1 
2 
3 
1

Strcat concatène. Je crois que ce que vous voulez, c'est obtenir les parties séparées une par une, et ne pas les concaténer.

Alors tu ferais mieux essayer quelque chose comme ceci:

char split[MAX_NUM_TOKENS][50]; 
int num_tokens = 0; 

Et au lieu de strcat, utilisez quelque chose comme:

strcpy(split[num_tokens], *pch); 
printf("The string is %s\n",split[num_tokens]); 
num_tokens++; 
+0

Je pense que je l'ai fait ce que vous avez dit et je ne suis imprimé La chaîne est Supprimer plusieurs fois [link] http://pastebin.com/mn337qXY –

+0

Ok, j'ai effectivement une erreur de segmentation –

+0

@ThomasJeffrey Oui. le strcpy devrait avoir 'pch' au lieu de '* pch'. Ma faute. –