我有一个单空格分隔的字符串,我想替换字段x。
我可以重复使用find
找到x - 1和x空格,然后使用substr
抓取两边的两个字符串,然后连接两个子字符串和我的替换文本。 / p>
但对于那些应该简单的事情来说,这似乎是一项非常艰巨的工作。有没有更好的解决方案 - 一个不需要Boost的解决方案?
答案 我已经清理了下面的@Domenic Lokies答案:
sting fieldReplace( const string input, const string outputField, int index )
{
vector< char > stringIndex( numeric_limits< int >::digits10 + 2 );
_itoa_s( index, stringIndex.begin()._Ptr, stringIndex.size(), 10 );
const string stringRegex( "^((?:\\w+ ){" ); //^((?:\w+ ){$index})\w+
return regex_replace( input, regex( stringRegex + stringIndex.begin()._Ptr + "})\\w+" ), "$1" + outputField );
}
(_itoa_s
和_Ptr
只是MSVS我相信,所以如果你想要代码可移植性,你需要清理它们。)
答案 0 :(得分:1)
您可以使用string::replace
方法之一:
x-1
- st空格的位置。您可以通过重复调用string::find
x
,找到string::find
个空间的位置string::replace
传递第一个索引,长度和替换字符串。以下是如何实现这一点:
#include <iostream>
#include <string>
using namespace std;
int main() {
string s = "quick brown frog jumps over the lazy dog";
size_t start = -1;
int cnt = 3; // Word number three
do {
start = s.find(' ', start+1);
} while (start != string::npos && --cnt > 1);
size_t end = s.find(' ', start+1);
s.replace(start+1, end-start-1, "fox");
cout << s << endl;
return 0;
}
答案 1 :(得分:0)
从C ++ 11开始,您应该使用正则表达式。如果您没有使用支持C ++ 11的编译器,可以查看Boost.Regex。
永远不要将std::string::find
与std::string::replace
合并,这在C ++这样的语言中不是一个好的风格。
我写了一个简短的例子,向您展示如何在C ++中使用正则表达式。
#include <string>
#include <regex>
#include <iostream>
int main()
{
std::string subject = "quick brown frog jumps over the lazy dog";
std::regex pattern("frog");
std::cout << std::regex_replace(subject, pattern, "fox");
}