我有一个以空格分隔的字符串,我想替换字段x。
我可以反复使用find
定位x-1和x空格,然后使用substr
抓住任一侧的两个字符串,然后将两个子字符串和我的替换文本连接起来。
但是对于看起来应该简单的事情来说,这似乎是一件艰巨的工作。是否有更好的解决方案-不需要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,因此,如果需要代码可移植性,则需要清理它们。) 最佳答案
从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");
}
关于c++ - 替换以空格分隔的字符串C++中的字段,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20497091/