替换空格分隔字符串C ++中的字段

时间:2013-12-10 14:28:21

标签: c++ string delimiter

我有一个单空格分隔的字符串,我想替换字段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我相信,所以如果你想要代码可移植性,你需要清理它们。)

2 个答案:

答案 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;
}

Demo on ideone.

答案 1 :(得分:0)

从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");
}