Compruebe si la línea es un espacio en blanco

¿Hay una manera fácil de verificar si una línea está vacía? Así que quiero verificar si contiene algún espacio en blanco como \ r \ n \ t y espacios.

Gracias

Puede usar la función isspace en un bucle para verificar si todos los caracteres son espacios en blanco:

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

Esta función devolverá 0 si algún carácter no es un espacio en blanco (es decir, la línea no está vacía), o 1 de lo contrario.

Si una cadena s está formada únicamente por caracteres de espacio en blanco, entonces strspn(s, " \r\n\t") devolverá la longitud de la cadena. Por lo tanto, una forma simple de verificar es strspn(s, " \r\n\t") == strlen(s) pero esto atravesará la cadena dos veces. También puede escribir una función simple que atraviese la cadena solo una vez:

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

No buscaré ‘\ 0’ ya que ‘\ 0’ no es espacio y el bucle terminará ahí.

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

Dada una char *x=" "; Esto es lo que puedo sugerir:

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

Considere el siguiente ejemplo:

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

Mi sugerencia sería:

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

con un ejemplo de trabajo .

  1. Recorre los caracteres de la cadena y se detiene cuando
    • o bien se encontró un carácter no espacial,
    • o nul carácter fue visitado.
  2. Cuando el puntero de cadena se haya detenido, compruebe si el contenido de la cadena es el carácter nulo.

En materia de complejidad, es lineal con O (n), donde n es el tamaño de la cadena de entrada.

Para C ++ 11, puede verificar si una cadena es un espacio en blanco que usa std::all_of y isspace (el espacio de verificación busca espacios, tabulaciones, nueva línea, tabulación vertical, avance y retorno de carro:

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

Si realmente solo quieres comprobar el espacio de caracteres, entonces:

 std::all_of(str.begin(), str.end(), [](const char& c) { return c == ' '; });