C++ find()函数 string::npos属性 substr使用记录

最近在准备CCF CSP考试的时候遇到了很多需要做字符串处理的题,一般都会出现在第三题左右的位置,而字符串处理麻烦的地方不是在于缺少方法,而是平时对于方法的使用太少,很多时候只能自己定义方法或者按照字符去进行处理

今天做题的时候遇到了几个函数,感觉做题的时候如果使用的话会方便很多,这里记录一下,方便以后使用

1.find()函数

有的时候老师上课会说即便我们课上使用的是国外教材的翻译版,有机会还是应该看看原版的书,因为一些定义会解释的让人有恍然大悟的感觉,比一些书上以定义解释定义的方法更让人容易接受

在遇到一些函数的时候,观察它的命名会大概理解这个函数的用途,比如这个find()函数,根据命名就知道这是个查找的函数,再看一下基本的用法,<string>.find("substr"),这里的参数可以是一个子串,也就是这个函数会从调用方法的字符串中查找substr在母串中的位置并返回,比如我在看一位大神的代码的时候就使用了这样的方法:

int pos=str[i].find(" ");

这就是在str[i]中查找空格所在的位置,那么很快就会想到一个问题:如果没有怎么办?这里涉及到了下一个要记录的东西

2.npos属性

同样的方法,我们先看一下命名,pos很明显是位置的意思了,那么这个n是要干嘛的呢?

通过查找了一些博客,知道了npos其实代表着无效的、不存在的位置,搭配我们上面提到的find函数就很好理解了,如果我们查找的子串位置是npos,那么代表着什么呢?代表着查找的位置不是一个有效位置,再换一个说法,没找到位置呀,这个子串不在母串中。比如可以这样使用:

int pos=str[i].find(" ");
		/*知道字符串结束都没有找到空格,表示没有属性*/
		if(pos==string::npos)
		{
			id[i]=="*";
		}

到这里突然想到很久之前看到的一道CCF的题,是查找子串是否存在于母串中的,还要通过一个变量区分大小写是否敏感,就可以使用find函数搭配npos属性完成,如果敏感的话就可以直接使用find函数并判断是否等于npos,不等于说明在母串中。而如果大小写不敏感的话就可以重新写一个函数,把子串和所有母串都统一改为大写或者小写,再完成上面的操作,这样方便多了呀!

3.substr()函数

substr根据命名可以看出来这是一个和子串有关的函数,具体的用法呢?

首先这个函数有两个参数,第一个是起始的位置,第二个是取子字符串的长度,比如我们这样使用:

string str="123465789...";

string sub=str.substr(0,6);

cout<<sub<<endl;

第一个参数表示我们要从位置0开始取子字符串,第二个参数表示我们要取长度为5的字符串,所以最后取出的sub就为:
“123465”

这个函数也可以和我们前面提到的find()搭配使用,首先使用find()找到位置,再使用substr取出来

猜你喜欢

转载自blog.csdn.net/LieberVater/article/details/88598037