Question

Y at-il un moyen facile de vérifier si une ligne est vide. Donc, je veux vérifier si elle contient un espace blanc comme \ r \ n \ t et espaces.

Merci

Était-ce utile?

La solution

Vous pouvez utiliser la fonction isspace dans une boucle pour vérifier si tous les caractères sont des espaces:

int is_empty(const char *s) {
  while (*s != '\0') {
    if (!isspace((unsigned char)*s))
      return 0;
    s++;
  }
  return 1;
}

Cette fonction retourne 0 si aucun caractère ne sont pas des espaces (à savoir la ligne est non vide), ou une autre.

Autres conseils

Si une s de chaîne est constituée uniquement de caractères blancs puis strspn(s, " \r\n\t") retourne la longueur de la chaîne. Par conséquent, un moyen simple de vérifier est strspn(s, " \r\n\t") == strlen(s) mais cela traverse la chaîne deux fois. Vous pouvez également écrire une fonction simple qui traverserait à la chaîne une seule fois:

bool isempty(const char *s)
{
  while (*s) {
    if (!isspace(*s))
      return false;
    s++;
  }
  return true;
}

Je ne vérifie pas pour « \ 0 » puisque « \ 0 » est pas l'espace et la boucle se terminera là.

int is_empty(const char *s) {
  while ( isspace( (unsigned char)*s) )
          s++;
  return *s == '\0' ? 1 : 0;
}

Étant donné un char *x=" "; est ce que je peux suggérer ici:

bool onlyspaces = true;
for(char *y = x; *y != '\0'; ++y)
{
    if(*y != '\n') if(*y != '\t') if(*y != '\r') if(*y != ' ') { onlyspaces = false; break; }
}

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

Ma suggestion serait:

int is_empty(const char *s)
{
    while ( isspace(*s) && s++ );
    return !*s;
}

exemple de travail .

  1. Les boucles sur les caractères de la chaîne et s'arrête
    • soit un caractère non-espace a été trouvé,
    • ou le caractère NUL a reçu la visite.
  2. Lorsque le pointeur de la chaîne a arrêté, vérifier si le contient de la chaîne est le caractère NUL.

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

Pour C ++ 11 vous pouvez vérifier est une chaîne est des espaces en utilisant std::all_of et isspace (contrôles isspace pour espaces, onglets, saut de ligne, l'onglet vertical, alimentation et retour chariot

std::string str = "     ";
std::all_of(str.begin(), str.end(), isspace); //this returns true in this case

si vous voulez vraiment que pour vérifier l'espace de caractère alors:

std::all_of(str.begin(), str.end(), [](const char& c) { return c == ' '; });
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top