string :: npos是什么意思

时间:2010-09-30 05:12:46

标签: c++

声明string::npos在这里意味着什么

found=str.find(str2);

if (found!=string::npos)
    cout << "first 'needle' found at: " << int(found) << endl;

12 个答案:

答案 0 :(得分:75)

这意味着没找到。

通常定义如下:

static const size_t npos = -1;

最好与npos而不是-1进行比较,因为代码更清晰。

答案 1 :(得分:46)

string::npos是一个代表非位置的常量(可能是-1)。当找不到模式时,它由方法find返回。

答案 2 :(得分:21)

string::npos的文件说:

  

npos是一个静态成员常量值,对于size_t类型的元素具有最大可能值。

     

作为返回值,它通常用于表示失败。

     

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

答案 3 :(得分:14)

size_t是无符号变量,因此'unsigned value = - 1'会自动使其成为size_t的最大可能值:18446744073709551615

答案 4 :(得分:8)

std::string::npos是实现定义的索引,它始终超出任何std::string实例的范围。各种std::string函数返回它或接受它在字符串情况结束后发出信号。它通常是一些无符号整数类型,其值通常为std::numeric_limits<std::string::size_type>::max (),这是(由于标准整数提升)通常与-1相当。

答案 5 :(得分:3)

我们必须使用string::size_type作为查找函数的返回类型,否则与string::npos的比较可能不起作用。 size_type,由字符串的分配器定义,必须是unsigned 积分型。默认分配器allocator使用size_t类型作为size_type。因为-1是 转换为无符号整数类型,npos是其类型的最大无符号值。然而, 确切的值取决于类型size_type的确切定义。不幸的是,这些最大 价值观不同。事实上,如果(unsigned long)-1的大小不同,则(unsigned short)-idx == std::string::npos 1不同 类型不同。因此,比较

-1
如果idx的值为string::npos且idx和std::string s; ... int idx = s.find("not found"); // assume it returns npos if (idx == std::string::npos) { // ERROR: comparison might not work ... } 的类型不同,则

可能会产生错误:

if (s.find("hi") == std::string::npos) {
...
}

避免此错误的一种方法是检查搜索是否直接失败:

const int NPOS = -1;

但是,通常需要匹配字符位置的索引。因此,另一个简单的解决方 是为npos定义你自己的签名值:

if (idx == NPOS) { // works almost always
...
}

现在比较看起来有点不同,甚至更方便:

{{1}}

答案 6 :(得分:2)

如果未能在搜索字符串中找到子字符串,

found将为npos

答案 7 :(得分:1)

$21.4 - "static const size_type npos = -1;"

由字符串函数返回,表示错误/未找到等。

答案 8 :(得分:1)

string :: npos的值为18446744073709551615。如果未找到字符串,则返回其值。

答案 9 :(得分:0)

npos只是一个标记值,告诉你find()没有找到任何东西(可能是-1或类似的东西)。 find()检查参数的第一次出现,并返回参数开始的索引。 例如,

  string name = "asad.txt";
  int i = name.find(".txt");
  //i holds the value 4 now, that's the index at which ".txt" starts
  if (i==string::npos) //if ".txt" was NOT found - in this case it was, so  this condition is false
    name.append(".txt");

答案 10 :(得分:0)

static const size_t npos = -1;

size_t的最大值

npos是一个静态成员常量值,对于size_t类型的元素,该值可能为最大值。

该值用作字符串成员函数中len(或sublen)参数的值时,表示“直到字符串结尾”。

作为返回值,通常用于表示没有匹配项。

此常量定义为值-1,这是因为size_t是无符号整数类型,因此它是此类型可能的最大可表示值。

答案 11 :(得分:0)

当我们有了std::optional时,这就是C ++ 17的答案:

如果您斜视一下并假装std::string::find()返回一个std::optional<std::string::size_type>(应该这样),则条件变为:

auto position = str.find(str2);

if ( position.has_value() ) {
    std::cout << "first 'needle' found at: " << found.value() << std::endl;
}