是否有一种简单的方法来检查线是否为空。所以我想检查它是否包含任何空格,例如\ r \ n \ t和空格。
由于
答案 0 :(得分:20)
您可以在循环中使用isspace
函数来检查所有字符是否都是空格:
int is_empty(const char *s) {
while (*s != '\0') {
if (!isspace((unsigned char)*s))
return 0;
s++;
}
return 1;
}
如果任何字符不是空格(即行不为空),则此函数将返回0,否则返回1。
答案 1 :(得分:3)
如果字符串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;
}
答案 2 :(得分:1)
我不会检查'\ 0',因为'\ 0'不是空格,循环将在那里结束。
int is_empty(const char *s) {
while ( isspace( (unsigned char)*s) )
s++;
return *s == '\0' ? 1 : 0;
}
答案 3 :(得分: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; }
}
答案 4 :(得分: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;
}
答案 5 :(得分:0)
我的建议是:
int is_empty(const char *s)
{
while ( isspace(*s) && s++ );
return !*s;
}
就复杂性而言,它与O(n)成线性关系,其中n是输入字符串的大小。
答案 6 :(得分:0)
对于C ++ 11,您可以使用std::all_of
和isspace
检查字符串是否为空格(isspace检查空格,制表符,换行符,垂直制表符,Feed和回车符:
<div class="form-group col-md-8">
DESIGNATION
<input type="text" name="disgn" class="form-control" ng-model="contact.disgn"/>
</div>
如果您真的只想检查字符空间,那么:
std::string str = " ";
std::all_of(str.begin(), str.end(), isspace); //this returns true in this case
答案 7 :(得分:0)
这可以用 strspn 一次性完成(只是 bool 表达式):
char *s;
...
( s[ strspn(s, " \r\n\t") ] == '\0' )