GetLine de verificación si la línea es un espacio en blanco
-
09-10-2019 - |
Pregunta
¿Hay una manera fácil de comprobar si una línea está vacía. Así que quiero para comprobar si contiene cualquier espacio en blanco como \ r \ n \ t y espacios.
Gracias
Solución
Se puede utilizar la función de href="http://www.opengroup.org/onlinepubs/009695399/functions/isspace.html" rel="noreferrer"> isspace
en un bucle para comprobar si todos los caracteres de espacio en blanco son:
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ío), o 1 en caso contrario.
Otros consejos
Si un s
cadena se compone sólo de caracteres de espacio en blanco a continuación, strspn(s, " \r\n\t")
devolverá la longitud de la cadena. Por lo tanto, una forma sencilla de verificación es strspn(s, " \r\n\t") == strlen(s)
pero esto va a 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;
}
Yo no comprobará '\ 0' desde '\ 0' no es el espacio y el bucle termina ahí.
int is_empty(const char *s) {
while ( isspace( (unsigned char)*s) )
s++;
return *s == '\0' ? 1 : 0;
}
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; }
}
Consideremos 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;
}
Mi sugerencia sería:
int is_empty(const char *s)
{
while ( isspace(*s) && s++ );
return !*s;
}
con un ejemplo de trabajo .
- Los bucles más de los caracteres de la cadena y se detiene cuando
- Se encontró un carácter de no-espacio,
- o carácter nulo fue visitado.
- Cuando el puntero de cadena se ha detenido, compruebe si la contiene de la cadena es el carácter nulo.
En cuestión de complejidad, es lineal con O (n), donde n el tamaño de la cadena de entrada.
En C ++ 11 se puede comprobar es una cadena es un espacio en blanco usando std::all_of
y isspace
(cheques isspace para los espacios, las pestañas, de nueva línea, pestaña 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 desea comprobar si el espacio de carácter continuación:
std::all_of(str.begin(), str.end(), [](const char& c) { return c == ' '; });