Вопрос

Есть ли простой способ проверить, пустая линия. Поэтому я хочу проверить, содержит ли он одно белое пространство, такое как 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;
}

с А. Рабочий пример.

  1. Петли над персонажами строки и останавливаются, когда
    • Был найден либо несмотрястный символ,
    • или нульский характер был посещен.
  2. Там, где указатель 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 == ' '; });
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top