我有一个以空格分隔的字符串,我想替换字段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::findstd::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/

10-16 14:06