我以前从未见过的代码行

时间:2012-02-27 15:24:43

标签: c++

这是我目前正在浏览的一段C ++代码,但我以前从未见过它。有人能告诉我这是什么意思吗?如果找到searchText,它只是将bool设置为true吗?

size_t startPos = searchString.find("searchText");
bool found = startPos != std::string::npos;

7 个答案:

答案 0 :(得分:7)

std::string::find()返回给定字符串中搜索到的子字符串的位置,如果找不到子字符串,则返回std::string::npos(常量)。

如果以这样的方式编写代码,也许你会更好地阅读代码:

size_t startPos = searchString.find("searchText");

// In the next line, '(' and ')' are not mandatory, but make this easier to read.
bool found = (startPos != std::string::npos);

也就是说,如果startPosstd::string::npos不同,则会找到子字符串。

答案 1 :(得分:1)

是。 std::string::npos只是“最大可能”的价值。如果不是startpos,则必须找到搜索字符串。

答案 2 :(得分:0)

是的,这正是它的作用。 std::string::npos是一个静态成员常量值,对于size_t类型的元素具有最大可能值。如果string::find找不到给定的文本模式,则返回该值。

答案 3 :(得分:0)

是的,就是这样。如果无法找到子字符串,string::npos将返回string::find

答案 4 :(得分:0)

请参阅http://www.cplusplus.com/reference/string/string/npos/

  

此常量实际上定义为值-1(对于任何特征),因为size_t是无符号整数类型,因此成为此类型的最大可表示值。

这实际上搜索searchString中的子字符串,如果找不到则将found设置为false,如果子字符串存在则将其设置为true。

答案 5 :(得分:0)

此代码段有两个步骤:

  1. 第一行检查变量searchText中是否找到字符串searchString(我假设它是std :: string类型)。如果找到该字符串,方法find()将返回找到该字符串的位置,否则它将返回std::string::nposfind()方法的结果存储在startPos

  2. 布尔变量found是根据步骤#1中找到的字符串初始化的。如果写成:

    ,它本来会更具可读性

    bool found = (startPos != std::string::npos);

  3. 请注意,std::string::npos是一个定义为-1的命名常量,它是size_t(所有0xFF s)的最大可能值。

答案 6 :(得分:-1)

这是windows.h库中的一个函数。