C++: string 中find函数的用法以及string::npos的含义

文章介绍了如何使用C++的string库中的find函数和npos常量来判断一个字符串是否包含另一个字符串。通过find函数返回值与npos的比较,实现简单的字符串查找和包含性验证。此外,还展示了在字符串操作中使用erase和insert函数的例子。
摘要由CSDN通过智能技术生成

主要解决问题为:有两个字符串a、b, 现想判断a字符串是否包含b字符串?

关键思路:此处需要用到string库中的find函数与npos参数。

1:string::npos参数:
npos 是一个常数,用来表示不存在的位置,类型一般是std::container_type::size_type 许多容器都提供这个东西。取值由实现决定,一般是-1,这样做,就不会存在移植的问题了。
2:find函数:
find函数的返回值是整数,假如字符串存在包含关系,其返回值必定不等于npos,但如果字符串不存在包含关系,那么返回值就一定是npos。所以不难想到用if判断语句来实现!

if (a.find(b) != a.npos) {
    cout << "Yes!" << endl;
} else {
    cout << "No!" << endl;
}

具体:
 

# include <iostream>
# include <string>
using namespace std;
int main() {
    int n;
    cin >> n;
    while (n--) {
        string a, b;
        cin >> a >> b;
        int pos = a.find(b);
        if (pos == a.npos) {
            cout << "NO" << endl;
        } else {
            cout << "YES" << endl;
        }
    }
    return 0;
}

附上今年天梯赛狠狠吃我分的一题!

关键一:s.npos:

关键二:erase里面每个前面都要先加一个s.begin()!!!

#include<iostream>
#include<string>
using namespace std;
string s,s1,s2,s3;
int n,a,b;
int main(){
	
	cin>>s>>n;
	while(n--){
		cin>>a>>b>>s1>>s2;
		s3=s.substr(a-1,b-a+1);
		s.erase(s.begin()+a-1,s.begin()+b);
		int len=s1.length();
		s1+=s2;//配接起来找,(因为是s1的后面一定要是说) 
		int pos=s.find(s1);
		if(pos!=s.npos){//找到 
			s.insert(pos+len,s3);
		}
		else{
			s.insert(s.length(),s3);//没找到插在末尾 
		}
	}
	return 0;
}

over~

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值