2010-07-27 4 views
2
char *p = " woohoo"; 

int condition = /* some calculation applied to p   */ 
       /* to look for all 0x20/blanks/spaces only */ 

if (condition) 
{ 
} 
else 
{ 
    printf("not "); 
} 

printf("all spaces\n"); 

Répondre

8

One-liner:

int condition = strspn(p, " ") == strlen(p); 

Un peu plus optimisé:

int condition = p[strspn(p, " ")] == '\0'; 
+3

+1 Le second est * significativement * optimisé plutôt que * légèrement *, cependant, pour les raisons discutées ici: http://www.joelonsoftware.com/articles/fog0000000319.html – Clifford

+0

ya, il fait logiquement un passage sur le chaîne au lieu de 2. Que diriez-vous d'une chaîne vide? – EvilTeach

+0

Ya. Cela fonctionne pour ma situation. Une chaîne vide renvoie true, ce qui me dit qu'il n'y a pas d'informations utiles dans la chaîne de caractères. – EvilTeach

1

Si vous voulez un moyen rapide pour ce faire, la meilleure chose qui me vient à l'esprit est d'écrire votre propre fonction (je suppose que vous ne recherchez que des caractères).

int yourOwnFunction(char *str, char c) { 
    while(*str != '\0' && *str != c) { 
     str++; 
    } 
    return *str == '\0'; 
} 

Alors il vous suffit de tester

if(yourOwnFunction(p,' ')) { 
    ... 
} else { 
    ... 
} 

-moi si je mal compris quelque chose :) Btw

Je n'ai pas testé, mais cela devrait être dans le pire des cas aussi vite comme l'autre méthode proposée. Si vous voulez juste une solution (élégante) de strager à un seul revêtement est la voie à suivre!

+0

C'est sympa en ce qu'il court-circuite, quand un non vide est rencontré. – EvilTeach

Questions connexes