GetLine Check IF Line Thitespace
-
09-10-2019 - |
Вопрос
Есть ли простой способ проверить, пустая линия. Поэтому я хочу проверить, содержит ли он одно белое пространство, такое как r n t и пробелы.
Спасибо
Решение
Вы можете использовать isspace
Функция в цикле для проверки, если все символы пробели:
int is_empty(const char *s) {
while (*s != '\0') {
if (!isspace((unsigned char)*s))
return 0;
s++;
}
return 1;
}
Эта функция вернет 0, если какой-либо символ не пробел (т. Е. Линия не пуста), или 1 в противном случае.
Другие советы
Если строка s
состоит только из персонажей белого пространства, затем strspn(s, " \r\n\t")
вернет длину строки. Поэтому простой способ проверить strspn(s, " \r\n\t") == strlen(s)
Но это будет проходить строку дважды. Вы также можете написать простую функцию, которая пройдет в строку только один раз:
bool isempty(const char *s)
{
while (*s) {
if (!isspace(*s))
return false;
s++;
}
return true;
}
Я не проверю « 0», так как « 0» не пространство, а цикл заканчивается там.
int is_empty(const char *s) {
while ( isspace( (unsigned char)*s) )
s++;
return *s == '\0' ? 1 : 0;
}
Дано а char *x=" ";
Вот что я могу предложить:
bool onlyspaces = true;
for(char *y = x; *y != '\0'; ++y)
{
if(*y != '\n') if(*y != '\t') if(*y != '\r') if(*y != ' ') { onlyspaces = false; break; }
}
Рассмотрим следующий пример:
#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;
}
Мое предложение было бы:
int is_empty(const char *s)
{
while ( isspace(*s) && s++ );
return !*s;
}
с А. Рабочий пример.
- Петли над персонажами строки и останавливаются, когда
- Был найден либо несмотрястный символ,
- или нульский характер был посещен.
- Там, где указатель String остановился, проверьте, есть ли строка строки Nul.
В вопросе сложности это линейно с O (n), где n размер входной строки.
Для C ++ 11 вы можете проверить это строка пробел, используя std::all_of
и isspace
(Проверки ISSPACE для пробелов, вкладки, новой строки, вертикальная вкладка, возврат корма и каретки:
std::string str = " ";
std::all_of(str.begin(), str.end(), isspace); //this returns true in this case
Если вы действительно хотите проверить наличие пространства персонажей, то:
std::all_of(str.begin(), str.end(), [](const char& c) { return c == ' '; });