【STL】string之erase()/find()/string::npos

本文详细介绍了使用C++进行字符串操作的方法,包括如何利用find()函数查找子串位置,以及如何使用erase()函数删除字符串中特定部分。通过具体示例,展示了如何无限次删除字符串中的关键词,直至完全移除。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题意:在第一行输入一个句子,第二行输入一个关键词,然后在第一行句子中无限删去关键词直到不存在关键词为止并且输出。

#include<bits/stdc++.h>
using namespace std;
int main()
{
	string a, b;
	getline(cin, a);
	getline(cin, b);
	while (a.find(b) != string::npos)//如果找到了(如果没有没找到)
	{
		a.erase(a.find(b), b.length());
	}
	cout << a;
	return 0;
}

这里我们运用到了string中find()函数的用法.
a.find()返回首字母下标

string::npos表示没找到的意思
查找字符串a是否包含子串b,不是用strA.find(strB) > 0 而是 strA.find(strB) != string:npos其中string:npos是个特殊值,说明查找没有匹配

接下来是关于string中erase()函数的用法:

#include<iostream>
#include<string>
using namespace std;

int main(){
    string str = "hello c++! +++";
    // 从位置pos=10处开始删除,直到结尾
    // 即: " +++"
    str.erase(10);
    cout << '-' << str << '-' << endl;
    // 从位置pos=6处开始,删除4个字符
    // 即: "c++!"
    str.erase(6, 4);
    cout << '-' << str << '-' << endl;
    return 0;
}

即从给定起始位置pos处开始删除, 要删除字符的长度为n, 返回值修改后的string对象引用

std::string类是C++标准库中的一个重要类,用于处理字符串。它提供了多种查找字符串的方法,其中包括使用std::find函数和一些成员函数。成员函数的使用更加便捷。 std::string类的std::find函数可以在字符串中查找指定的子字符串,并返回第一次出现的位置。它接受两个迭代器参数,表示要在字符串中查找的范围。如果找到了子字符串,它将返回指向该子字符串的迭代器;否则,返回末尾迭代器。 除了std::find函数,std::string类还提供了其他成员函数用于查找操作。其中包括find_first_of、find_first_not_of、find_last_of和find_last_not_of等函数,它们分别用于查找第一个匹配的字符、查找第一个不匹配的字符、查找最后一个匹配的字符和查找最后一个不匹配的字符。这些成员函数返回的是找到的字符的位置,如果没有找到,返回一个特殊的值std::string::npos。 总之,std::string类提供了多种查找字符串的方法,包括使用std::find函数和一些成员函数。通过这些方法,我们可以方便地在std::string对象中查找指定的子字符串。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [STL(四) std::string /std::wstring 查找、删除、替换(find erase replace)](https://blog.youkuaiyun.com/yedawei_1/article/details/108810038)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值