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.