可变长度字符串内容的非递归检查
non recursive check of variable length string content
我有一个函数,它接受可变长度的char*和长度。我想检查它的内容是否都是空白
它是一个可变长度,这意味着我不能使用memcmp,因为我不知道第二个参数的长度。
有没有想过一种简洁的方法来检查它,而不是遍历字符串的每个字符?
只需遍历字符并检查空白(例如使用isspace
函数)。
也可以将char*
转换为std::string
,使用字符串函数,即find_first_not_of
。例如,在unicode前编码中使用"常规"空白字符:
bool is_all_spaces(char const* text, unsigned len) {
string str(text, len);
return str.find_first_not_of(" trnvf") == string::npos;
}
一个更花哨的空白识别将处理任意文本编码/区域设置。出于这个原因,使用isspace
可能比find_first_not_of
方法更好。
无论哪种情况,在c++中使用memcmp
都是不明智的,你通常应该更喜欢c++字符串而不是C风格的字符数组。
回答这个确切要求的一种合理有效的方法是:
bool is_whitespace(const char* p, size_t n)
{
while (n--)
if (!isspace(static_cast<unsigned char>(*p++)))
return false;
return true;
}
一般来说,尝试将这些数据存储在std::string
变量中是一个好主意,这使得像Konrad的find_first_not_of
这样的解决方案更加高效和方便。
*感谢Steve在一些非ascii字符串内容的平台上对reisspace的评论…例如http://msdn.microsoft.com/en-us/library/ms245348.aspx。
如果您想知道字符串中的某个字符是否具有某个值,并且您想知道对于字符串中的所有字符,您需要遍历字符串。没有别的办法。即使是memcmp
在字符串上循环,它对你来说也是隐藏的。
编辑:我想我会提供一个简单的实现可变长度字符串:
bool is_only_space(const char* str){
while(*str != ' '){
if(*str != ' ')
return false;
++str;
}
return true;
}
当然,这只适用于以空结尾的字符串,但这应该是给定的。
相关文章:
- C++:正在检查LinkedList中的回文-递归方法-错误
- 如何使用递归检查数字是否有重复数字?
- 我遇到了这个代码片段,不明白. 它递归检查 C++ 字符串中是否存在大写字符
- 如何使用斐波那契和递归函数检查矩形是否是黄金矩形?
- 自上而下的动态规划与递归朴素解决方案.检查运行时执行
- 递归回文检查,不使用向量、大小或其他参数
- 编写一个函数,用递归函数检查数字是否是正方形
- 如何使O(n)的函数检查字母(上和下)和()+-*/到尾递归?
- C 模板递归以检查std :: tuple中的类型
- 递归检查数字的有效性
- 如何递归检查数字是否为斐波那契数
- 使用模板递归检查函数方法是否存在
- 用于检查数字的递归函数
- 使用模板进行递归类型检查
- 递归检查表达式有效性的布尔函数
- 我想要一个递归函数来检查使用二进制搜索数组的顺序
- dynamic_cast是否检查被查询对象的type_info对象,或者递归地检查
- c++递归检查number是否包含数字
- 递归检查一个数字的所有数字是否都不相同
- 可变长度字符串内容的非递归检查