正在验证C++机制中的字符串

Validating Strings In C++ mechanism

本文关键字:字符串 机制 C++ 验证      更新时间:2023-10-16

我在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"的至少一个字符。