正在验证C++机制中的字符串
Validating Strings In C++ mechanism
我在c++中搜索验证字符串,发现了这种机制。换句话说,验证意味着,如果有变量名,用户将无法向变量输入数字,只允许输入字符。
找到的机制:
if(std::string::npos != variable.find_first_of("0123456789")
有人能给我解释一下上述机制背后的逻辑吗。我不明白npos是什么意思?我寻找答案,但找不到我想要的答案。
谢谢你抽出时间。
std::string::npos
是一个常量,在本文中表示"未找到"。find_first_of
函数从作为参数传递的字符串中搜索第一个出现的字符。如果未找到(意味着variable
中没有数字(,则返回npos
。
该代码使用一些人认为有用的约定,而不是
if (f() != CONSTANT)
他们写
if (CONSTANT != f())
当使用=
而不是!=
时,应该避免问题,所以它是赋值而不是比较。有了今天的编纂者和警告,我觉得这个惯例不值得,但有些人的意见不同。
以下是网络上一些文档中的定义
std::string::find_first_of-在字符串中查找字符。在字符串中搜索与其参数中指定的任何字符匹配的第一个字符。
std::string::npos-npos是一个静态成员常数值,对于size_t类型的元素,它具有最大可能值。
让我们以这个为例:
Line:001. std::string sVariable = "this is a test string"`
Line:002. if(std::string::npos != sVariable.find_first_of("0123456789"))`
正如您所看到的,std::string::find_first_of
首先尝试检查字符串开头(或字符串的索引0(是否存在匹配。
如果没有找到匹配项,那么它将迭代到字符串的下一个索引,并检查该索引上的匹配项。然后继续下一个。
在某个时刻,搜索进入sVariable字符串的末尾,但仍然找不到。此时,find_first_of
将返回std::string::npos
值。
单击此处查看std::string::find_first_of
的一个定义。
返回值
第一个匹配字符的位置
如果没有找到匹配项,函数将返回字符串::npos。
std::string::npos
是一个常数,表示CCD_ 11函数返回的不同类型的故障。在这种情况下:没有发现这样的字符。
这个常数通常被定义为
static const size_type npos = -1;
http://en.cppreference.com/w/cpp/string/basic_string/npos
来自文档:
std::string::npos
npos是一个静态成员常数值,对于size_t类型的元素,它具有可能的最大值。
作为返回值,它通常用于表示没有匹配项。
的std::string::find_first_
如果没有找到匹配项,函数将返回字符串::npos。
该机制的逻辑是测试find_first_of
是否返回npos
以外的内容。在这种情况下,这意味着字符串包含来自字符串"0123456789"
的至少一个字符。