博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++中string::npos
阅读量:4089 次
发布时间:2019-05-25

本文共 964 字,大约阅读时间需要 3 分钟。

发现这个问题是在这段代码中:

                                            size_t pos=urls.find_first_of('/',7);

                                            if(pos!=string::npos)
                                                   len=pos-7;
                                           else
                                                  len=urls.length()-7;

首先是find_first_of,int find_first_of(char c, int start = 0),这个函数是从字符串的start位开始寻找字符为c的第一个位置,找到返回该位置,否则返回-1;

关键是这个为什么要跟string::npos进行比较呢?

npos的原型应该是std::container_type::size_type,每一个容器类都会定义这个值,表示一个不存在的位,用于统一对容器查找结果的判断,如find函数,若没有找到相应的值,就会返回npos,大家只要判断find返回的值是不是等于npos,就能判断出,在该容器是不是存在该值,平时我们判断的时候,只是看find返回的值是否等于-1,若为-1则未找到,其实是因为string::pos为-1,故正确,但是放在其他容器就不一定是这样,故大家进行判断的时候最好用npos。

再例如://银行系统中的输入钱数时的验证函数

bool validateMoney(const std::string str, char ch)

{
if (str.length() >= 11 || (!isdigit(ch) && ch!= '.'))
return false;
bool findDot = false;
size_t dotPos = std::string::npos;
dotPos = str.find('.');
if (dotPos != std::string::npos)
findDot= true;
if (findDot)
{
if (ch == '.')
return false;//不能出现两个点号
else if (str.length() - 1 >= dotPos + 2)//小数点后最多两位
return false;
}
else if (ch != '.'&&str.length() >= 8)  //小数点前面最多8位
return false;
return true;
}

转载地址:http://nfdii.baihongyu.com/

你可能感兴趣的文章
Nginx篇-springCloud配置Gateway+Nginx进行反向代理和负载均衡
查看>>
缓存篇-Redis缓存失效以及解决方案
查看>>
缓存篇-使用Redis进行分布式锁应用
查看>>
缓存篇-Redisson的使用
查看>>
phpquery抓取网站内容简单介绍
查看>>
找工作准备的方向(4月22日写的)
查看>>
关于fwrite写入文件后打开查看是乱码的问题
查看>>
用结构体指针前必须要用malloc,不然会出现段错误
查看>>
Linux系统中的美
查看>>
一些实战项目(linux应用层编程,多线程编程,网络编程)
查看>>
我觉得专注于去学东西就好了,与世无争。
查看>>
原来k8s docker是用go语言写的,和现在所讲的go是一个东西!
查看>>
STM32CubeMX 真的不要太好用
查看>>
STM32CubeMX介绍、下载与安装
查看>>
不要买铝合金机架的无人机,不耐摔,易变形弯曲。
查看>>
ACfly也是基于FreeRTOS的
查看>>
F330装GPS的位置
查看>>
《无人机电机与电调技术》可以看看
查看>>
我发现七月在线的GAAS课程基本都讲到了
查看>>
电机堵转
查看>>