2017-02-09 4 views
1

Je veux prendre une chaîne et la sortir sans espaces. J'ai écrit le code ci-dessous mais mon instruction if ne semble pas détecter les espaces dans la chaîne char ou je ne le fais pas correctement.Comment vérifier ma chaîne de caractères pour les espaces?

Je suppose que mon problème est dans mon instruction if mais je ne sais pas comment le réparer.

int main (void) 
{ 
    char s[50]; 

    printf("Enter string:"); 
    fgets(s,50,stdin); 

    for(int i = 0; i < strlen(s); i++){ 
    if(&s[i] != " "){ 
    printf("%c\n", s[i]); 
    } 
    } 

    return 0; 
} 

Sortie:

Enter string:xales was here 
x 
a 
l 
e 
s 

w 
a 
s 

h 
e 
r 
e 
+2

Remplacez 'if (& s [i]! =" ") {' Par 'if (s [i]! = '') {', Le premier ne correspond pas à ce que vous pensez probablement. – yeputons

+0

'if (& s [i]! =" ") {' Comparer une adresse d'un caractère à un littéral de chaîne? Fonctionne, mais jamais susceptible d'être vrai ... Voir http://stackoverflow.com/questions/3683602/single-quotes-vs-double-quotes-in-c-or-c – John3136

+0

@yeputons si vous écrivez cela comme répondez il le prend! Merci! – TheXales

Répondre

0

La chose importante à noter est qu'un double caractère cité est en fait une chaîne, pas un type char. Cette valeur contient une adresse de mémoire à un emplacement dans la mémoire de votre programme (pas une valeur sur la pile) qui a une longueur de 2 octets (un pour l'espace, un pour \0). Donc c'est chose # 1: changez " en ' et vous aurez un seul char, sur la pile, à comparer par valeur. Le numéro deux est qu'en utilisant le symbole &, vous essayez de vous comparer à l'adresse de l'index ie dans votre chaîne, au lieu de la valeur correspondante. Retirez simplement le &.

0

Oui, vous avez raison. Votre condition if est toujours vraie, par conséquent, vous finirez par imprimer toute la chaîne telle qu'elle est.
Votre si la condition: if(&s[i] != ' ') print s [i];

Ici "&" représente l'adresse. Donc, dans votre bloc si ce que vous vérifiez est:

` if(addressof(s[i] != ' ') print s[i]; ` 

adresse maintenant est jamais l'espace, d'où votre bloc si sera toujours vrai. Mais comme vous voulez vérifier s à imprimer sans espaces vérifier les valeurs: if(s[i] != ' ') print s [i];

En outre, comme vous comparez charecter sage, vous devez comprendre que « » est pour la chaîne et pour les caractères vous devez utiliser unique citations ''.