¿Existe alguna manera fácil de verificar si una línea está vacía? Por lo tanto, quiero verificar si contiene algún espacio en blanco como \ r \ n \ t y espacios.getline compruebe si la línea es un espacio en blanco
Gracias
¿Existe alguna manera fácil de verificar si una línea está vacía? Por lo tanto, quiero verificar si contiene algún espacio en blanco como \ r \ n \ t y espacios.getline compruebe si la línea es un espacio en blanco
Gracias
Usted puede utilizar la función isspace
en un bucle para comprobar si todos los caracteres son los 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 cualquier carácter no es un espacio en blanco (es decir, la línea no está vacía), o 1 en caso contrario.
Dado un 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; }
}
Si una cadena s
consiste solo en espacios 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 atravesaría en la cadena de una sola vez:
bool isempty(const char *s)
{
while (*s) {
if (!isspace(*s))
return false;
s++;
}
return true;
}
Considere el siguiente ejemplo:
#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;
}
No voy a comprobar si hay '\ 0' desde '\ 0' no es espacio y el ciclo terminará allí.
int is_empty(const char *s) {
while (isspace((unsigned char)*s))
s++;
return *s == '\0' ? 1 : 0;
}
Mi sugerencia sería:
int is_empty(const char *s)
{
while (isspace(*s) && s++);
return !*s;
}
con un working example.
En materia de complejidad, es lineal con O (n), donde n es el tamaño de la cadena de entrada.
para C++ 11 se puede comprobar es una cadena es un espacio en blanco usando std::all_of
y isspace
(cheques isspace de espacios, tabulaciones, salto de línea, tabulador vertical, alimentación y retorno de carro:
std::string str = " ";
std::all_of(str.begin(), str.end(), isspace); //this returns true in this case
si realmente sólo quería comprobar si el espacio de carácter a continuación:.
std::all_of(str.begin(), str.end(), [](const char& c) { return c == ' '; });
Pero isspace() valor devuelto depende de la configuración regional c instalado y lo que dependiendo de que pueda volver falsa de nueva línea o caracteres de tabulación – Suba