2010-10-20 15 views
6

Esiste un modo semplice per verificare se una linea è vuota. Quindi voglio controllare se contiene spazi bianchi come \ r \ n \ t e spazi.getline controlla se la linea è spazio

Grazie

+0

Ma isspace() valore di ritorno dipende dalle impostazioni locali c installati e così a seconda che esso può restituire false per caratteri di nuova riga o di tabulazione – Suba

risposta

15

è possibile utilizzare la funzione di isspace in un ciclo per controllare se tutti i personaggi sono gli spazi bianchi:

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

Questa funzione restituirà 0 se qualsiasi carattere non è uno spazio bianco (cioè la riga non è vuota), o 1 altrimenti.

+2

l'argomento a 'isspace'. dovrebbe essere lanciato su 'unsigned char' (le funzioni * "non mi piace" input negativo e 'char' possono essere firmate):' isspace ((unsigned char) * s) ' – pmg

+0

che funzionerà. Grazie! – Matt

0

Dato un char *x=" "; ecco cosa posso suggerire:

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

Se una stringa s consiste solo di caratteri di spazio vuoto, allora strspn(s, " \r\n\t") restituirà la lunghezza della stringa. Pertanto un modo semplice per controllare è strspn(s, " \r\n\t") == strlen(s) ma questo attraverserà la stringa due volte. È inoltre possibile scrivere una semplice funzione che avrebbe attraversare la stringa solo una volta:

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

consideri il seguente esempio:

#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; 
} 
+1

'str',' * c', 'c' quale è?:-) – pmg

+0

@pmg: solo 'str' è sbagliato. '* c' è il valore di' c', quindi va bene! Ma grazie! – Rizo

1

Non voglio verificare la presenza di '\ 0' poiche '\ 0' non è lo spazio e il ciclo finirà lì.

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

Il mio suggerimento sarebbe:

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

con un working example.

  1. Loops sopra i caratteri della stringa e si ferma quando
    • sia stato trovato un carattere non-spazio,
    • o nul carattere è stato visitato.
  2. Dove il puntatore di stringa si è fermato, verificare se il contenuto della stringa è il carattere nul.

In termini di complessità, è lineare con O (n), dove n la dimensione della stringa di input.

0

per C++ 11 è possibile controllare è una stringa è uno spazio utilizzando std::all_of e isspace (controlli isspace per gli spazi, tabulazioni, ritorno a capo, tabulazione verticale, mangimi e ritorno a capo:

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

se è davvero solo vuole controllare lo spazio carattere, quindi:.

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