9
votes

GetLine Check Si la ligne est blanche

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.

merci


1 commentaires

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.


8 Réponses :


0
votes

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; }
}


0 commentaires

23
votes

Vous pouvez utiliser Isspace Fonction dans une boucle pour vérifier si tous les caractères sont blancs: xxx

Cette fonction retournera 0 si un caractère n'est pas blanc (c.-à-d. La ligne n'est pas vide), ou 1 sinon.


1 commentaires

L'argument à ISSPACE doit être distribué sur non signé caractère (les fonctions IS * "n'aiment pas" l'entrée négative et Char peut être signé): ISSPACE ((non signé) * s)



3
votes

Si une chaîne s consiste uniquement à des caractères d'espace blancs, alors strpsn (s, "\ r \ n \ t") retournera la longueur de la chaîne. Par conséquent, un moyen simple de vérifier est strgespn (s, "\ r \ n \ t") == SHLEN (s) mais cela traversera la chaîne deux fois. Vous pouvez également écrire une fonction simple qui traverserait la chaîne une seule fois: xxx


0 commentaires

0
votes

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;
}


2 commentaires

str , * c , c qui est-ce? :-)


@PMG: seul str est faux. * C est la valeur de C , donc c'est ok! Mais merci!



1
votes

Je ne vérifierai pas '\ 0' car '\ 0' n'est pas de l'espace et la boucle se terminera là. XXX


1 commentaires

* s == '\ 0'? 1: 0 pourrait être simplifié à * s == '\ 0'



0
votes

Ma suggestion serait: xxx

avec un Exemple de travail .

  1. boucle sur les caractères de la chaîne et s'arrête lorsque
    • soit un caractère non spatial a été trouvé,
    • ou le caractère nul a été visité.
    • où le pointeur de cordes s'est arrêté, vérifiez si la contient de la chaîne est le caractère NUL.

      en matière de complexité, il est linéaire avec O (n), où n la taille de la chaîne d'entrée.


0 commentaires


0
votes

Ceci peut être fait avec STRSPN en une seule passe (juste expression bool): xxx


0 commentaires