行が空かどうかを確認する簡単な方法はありますか。\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)
が、これは文字列を 2 回トラバースします。文字列を 1 回だけトラバースする単純な関数を作成することもできます。
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;
}
C++11 の場合、std::all_of
and 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 == ' '; });
ここにあるとすれば、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;
}
実際の例で。
複雑なことに、O(n) に比例します。ここで、n は入力文字列のサイズです。