static const size_type npos = -1;//定义
The constant is the largest representable value of type size_type. It is assuredly larger than max_size(); hence it serves as either a very large value or as a special code.
以上的意思是npos是一个常数,表示size_t的最大值(Maximum value for size_t)。许多容器都提供这个东西,用来表示不存在的位置,类型一般是std::container_type::size_type。
-
-
-
-
using namespace std;
-
-
int main()
-
{
-
size_t npos = -1;
-
cout << "npos: " << npos << endl;
-
cout << "size_t max: " << numeric_limits<size_t>::max() << endl;
-
}
执行结果为:
npos: 4294967295
size_t max: 4294967295
可见他们是相等的,也就是说npos表示size_t的最大值
-
-
-
using namespace std;
-
int main()
-
{
-
string b;
-
getline(cin,b);
-
int count=0;
-
for(int i=0;i<=127;i++)
-
if(b.find(i)!=string::npos)
-
count++;
-
cout<<count;
-
}
举例2:
-
string name("Annaqijiashe");
-
int pos=name.find("Anna");
-
if(pos==string::npos)
-
cout<<"Anna not found!\n";
-
else cout<<"Anna found at pos:"<<pos<<endl;
- tmpname.replace(idx+1, string::npos, suffix);
这里的string::npos就是一个长度参数,表示直到字符串的结束,配合idx+1表示,string的剩余部分。
-
-
-
-
using namespace std;
-
int main()
-
{
-
string filename = "test.cpp";
-
cout << "filename : " << filename << endl;
-
-
size_t idx = filename.find('.'); //as a return value
-
if(idx == string::npos)
-
{
-
cout << "filename does not contain any period!" << endl;
-
}
-
else
-
{
-
string tmpname = filename;
-
tmpname.replace(idx + 1, string::npos, "xxx"); //string::npos作为长度参数,表示直到字符串结束
-
cout << "repalce: " << tmpname << endl;
-
}
-
}
filename:test.cpp
replace: test.xxx
三、值得注意的地方:
- int idx = str.find("abc");
- if (idx == string::npos)
- ...
if (str.find("abc") == string::npos) { ... }
2、string 类提供了 6 种查找函数,每种函数以不同形式的 find 命名。这些操作全都返回 string::size_type 类型的值,以下标形式标记查找匹配所发生的位置;或者返回一个名为 string::npos 的特殊值,说明查找没有匹配。string 类将 npos 定义为保证大于任何有效下标的值。
string::find()函数:是一个字符或字符串查找函数,该函数有唯一的返回类型,即string::size_type,即一个无符号整形类型,可能是整数也可能是长整数。如果查找成功,返回按照查找规则找到的第一个字符或者子串的位置;如果查找失败,返回string::npos,即-1(当然打印出的结果不是-1,而是一个很大的数值,那是因为它是无符号的)。
原文链接: https://www.cnblogs.com/forever-fireflies/p/12703271.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;
也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/342159
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!