Y a-t-il un moyen facile de vérifier si une ligne est vide. Donc, je veux vérifier s'il contient n'importe quel espace blanc tel que \ r \ n \ t et espaces. P>
merci p>
8 Réponses :
donné un char * x = ""; code> Voici ce que je peux suggérer:
bool onlyspaces = true;
for(char *y = x; *y != '\0'; ++y)
{
if(*y != '\n') if(*y != '\t') if(*y != '\r') if(*y != ' ') { onlyspaces = false; break; }
}
Vous pouvez utiliser Cette fonction retournera 0 si un caractère n'est pas blanc (c.-à-d. La ligne n'est pas vide), ou 1 sinon. P> p> Isspace code>
Fonction dans une boucle pour vérifier si tous les caractères sont blancs:
L'argument à ISSPACE code> doit être distribué sur
non signé caractère code> (les fonctions IS * "n'aiment pas" l'entrée négative et
Char code> peut être signé):
ISSPACE ((non signé) * s) code>
Si une chaîne s code> consiste uniquement à des caractères d'espace blancs, alors
strpsn (s, "\ r \ n \ t") code> retournera la longueur de la chaîne. Par conséquent, un moyen simple de vérifier est
strgespn (s, "\ r \ n \ t") == SHLEN (s) code> mais cela traversera la chaîne deux fois. Vous pouvez également écrire une fonction simple qui traverserait la chaîne une seule fois:
Considérez l'exemple suivant:
#include <iostream> #include <ctype.h> bool is_blank(const char* c) { while (*c) { if (!isspace(*c)) return false; c++; } return false; } int main () { char name[256]; std::cout << "Enter your name: "; std::cin.getline (name,256); if (is_blank(name)) std::cout << "No name was given." << std:.endl; return 0; }
str code>,
* c code>,
c code> qui est-ce? :-)
@PMG: seul str code> est faux.
* C code> est la valeur de
C code>, donc c'est ok! Mais merci!
Je ne vérifierai pas '\ 0' car '\ 0' n'est pas de l'espace et la boucle se terminera là.
* s == '\ 0'? 1: 0 code> pourrait être simplifié à
* s == '\ 0' code>
Ma suggestion serait: avec un Exemple de travail fort > . p> en matière de complexité, il est linéaire avec O (n), où n la taille de la chaîne d'entrée. p> p>
pour C ++ 11 Vous pouvez vérifier que une chaîne est une chaîne est blanche à l'aide de Si vous voulez vraiment seulement vérifier l'espace de caractères, alors: p> std :: all_of code>
et Isspace code> a> (Isspace vérifie les espaces, les onglets, la nouvelle ligne, l'onglet vertical, le retour d'alimentation et de chariot:
std::all_of(str.begin(), str.end(), [](const char& c) { return c == ' '; });
Ceci peut être fait avec STRSPN en une seule passe (juste expression bool):
Mais l'ISSPACE () La valeur de retour dépend de la locale C installée. Et donc en fonction de cela, il peut renvoyer false pour les caractères de nouvelle ligne ou de tabulation.