10

行が空かどうかを確認する簡単な方法はありますか。\r\n\t やスペースなどの空白が含まれているかどうかを確認したいと思います。

ありがとう

4

8 に答える 8

23

関数をループで使用してisspace、すべての文字が空白かどうかを確認できます。

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

この関数は、任意の文字が空白でない場合 (つまり、行が空でない場合) 0 を返し、それ以外の場合は 1 を返します。

于 2010-10-20T19:32:31.173 に答える
3

s文字列が空白文字のみで構成されている場合、文字列strspn(s, " \r\n\t")の長さが返されます。したがって、確認する簡単な方法は次のとおりですstrspn(s, " \r\n\t") == strlen(s)が、これは文字列を 2 回トラバースします。文字列を 1 回だけトラバースする単純な関数を作成することもできます。

bool isempty(const char *s)
{
  while (*s) {
    if (!isspace(*s))
      return false;
    s++;
  }
  return true;
}
于 2010-10-20T19:32:48.627 に答える
1

「\0」はスペースではなく、ループはそこで終了するため、「\0」はチェックしません。

int is_empty(const char *s) {
  while ( isspace( (unsigned char)*s) )
          s++;
  return *s == '\0' ? 1 : 0;
}
于 2010-10-21T00:59:55.393 に答える
0

C++11 の場合、std::all_ofand 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 == ' '; });
于 2016-09-08T12:21:10.450 に答える
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; }
}
于 2010-10-20T19:29:05.360 に答える
0

次の例を検討してください。

#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;
}
于 2010-10-20T19:41:04.007 に答える
0

私の提案は次のとおりです。

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

実際ので。

  1. 文字列の文字をループし、次の場合に停止します
    • スペース以外の文字が見つかった、
    • またはヌル文字が訪問されました。
  2. 文字列ポインターが停止した場所で、文字列の内容がヌル文字であるかどうかを確認します。

複雑なことに、O(n) に比例します。ここで、n は入力文字列のサイズです。

于 2015-07-16T11:50:49.350 に答える