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
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
è 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.
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; }
}
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;
}
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;
}
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;
}
Il mio suggerimento sarebbe:
int is_empty(const char *s)
{
while (isspace(*s) && s++);
return !*s;
}
con un working example.
In termini di complessità, è lineare con O (n), dove n la dimensione della stringa di input.
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 == ' '; });
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