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

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 .

  1. 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.
  2. 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 == ' '; });
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top