字符串替换之C++

  • #include "stdafx.h"
    #include<string>
    #include<iostream>
    using std::string;
    using std::cout;
    using std::endl;
    
    //返回一个不含strOld
    string strReplaceAll(const string& strResource, const string& strOld, const string& strNew)
    {
    	string::size_type pos = 0;
    	string strTemp = strResource;
    	do
    	{
    		if ((pos = strTemp.find(strOld)) != string::npos)
    		{
    			strTemp.replace(pos, strOld.length(), strNew);
    		}
    	} while (pos != string::npos);
    	return strTemp;
    }
    
    //返回一个用strNew将strResource中的strOld从头到尾替换一遍后的字符串
    string strReplaceAllOnce(const string& strResource, const string& strOld, const string& strNew)
    {
    	string strTemp = strResource;
    	string::size_type pos = 0;
    	do
    	{
    		if ((pos = strTemp.find(strOld,pos)) != string::npos)
    		{
    			strTemp.replace(pos, strOld.length(), strNew);
    			pos += strOld.length();
    		}
    		else
    			pos = string::npos;
    
    	} while (pos != string::npos);
    	
    	return strTemp;
    }
    
    
    int _tmain(int argc, _TCHAR* argv[])
    {
    	string strResource = "hello";
    	string strNew = "le";
    	string strOld = "el";
    	//按位置替换
    	strResource.replace(strResource.begin(), strResource.begin() + 2, strNew);
    
    	//按指定字符串替换
    	cout << strReplaceAll(strResource, strOld, strNew) << endl;
    	cout << strReplaceAllOnce(strResource, strOld, strNew) << endl;
    	
    	return 0;
    }
    

     

### C++ 中实现字符串替换操作 在 C++ 中,可以使用多种方式来执行字符串替换操作。以下是几种常见的方法: #### 使用 `std::string` 的成员函数 对于简单的单个字符或者子串的替换,可以直接利用 `std::string` 类提供的成员函数 `replace()` 来完成。 ```cpp #include <iostream> #include <string> int main() { std::string str = "hello world"; size_t pos = str.find("world"); if (pos != std::string::npos) { str.replace(pos, 5, "C++"); // 替换从位置 'pos' 开始长度为 5 的部分为 "C++" } std::cout << str << std::endl; } ``` 这段代码展示了如何通过定位目标子串的位置并调用 `replace()` 方法来进行替换[^1]。 #### 自定义全局替换函数 如果需要在整个字符串中多次出现的目标模式都进行替换,则可能更倾向于编写一个辅助函数来做这件事。 ```cpp #include <iostream> #include <string> void replaceAll(std::string& str, const std::string& from, const std::string& to) { if(from.empty()) return; size_t start_pos = 0; while((start_pos = str.find(from, start_pos)) != std::string::npos) { str.replace(start_pos, from.length(), to); start_pos += to.length(); // Handles case where 'to' is a substring of 'from' } } int main(){ std::string s="This is an example."; replaceAll(s,"is","IS"); std::cout<<s<<'\n'; } ``` 此程序片段提供了一个名为 `replaceAll` 的实用工具函数,它可以在整个输入字符串中找到所有的匹配项并将它们替换成指定的新值[^3]。 #### 利用正则表达式库 当涉及到复杂的模式匹配时,还可以考虑采用标准库中的 `<regex>` 头文件所提供的功能强大的正则表达式引擎来进行更加灵活多变的文字处理工作。 ```cpp #include <iostream> #include <regex> #include <string> int main() { std::string text = "The rain in SPAIN stays mainly in the plain."; std::regex re("(\\bain)"); std::string fmt = "$$$"; auto result = std::regex_replace(text, re, fmt); std::cout << result << '\n'; } ``` 上述例子说明了怎样借助于正则表达式的强大能力去识别特定模式(本例中是以单词边界包围着的 “ain”),并且将其转换成其他形式[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值