猪拉丁字符串迭代,多个单词

时间:2012-08-26 16:52:20

标签: c++

我正在读一本关于C ++的书和一本创建猪拉丁语翻译的练习。我已经找到了翻译单个单词的所有必要步骤。现在我在编写处理多字符串的函数时遇到了很多麻烦。

基本上我需要一些标准习语的帮助,用于迭代字符串的每个单词并对每个单词执行操作。

到目前为止,我所拥有的功能充其量只是草率而且我只是卡住了。

string sentenceToPigLatin(string str) {
    string result = "";
    for (int i = 0; i < str.length(); i++) {
        char ch = str.at(i);
        if (ch == ' ') {
            result += toPigLatin(str.substr(0, i));
            str = str.substr(i);
        }
    }
    return result;
}

您可以假设toPigLatin()为不包含空格的单词执行正确的过程。

1 个答案:

答案 0 :(得分:4)

您可以将整个字符串放在stringstream中,并使用提取运算符来获取单个词:

#include <sstream>  // for stringstreams

string sentenceToPigLatin(const string& str)
{ 
    istringstream stream(str);
    ostringstream result;
    string temp;
    while (stream >> temp)
            result << toPigLatin(temp) << ' ';
    return result.str();
}

另一种方法是将standard algorithmsstream iterators一起使用:

#include <algorithm> // for transform
#include <iterator>  // for istream_iterator and ostream_iterator

string sentenceToPigLatin(const string& str)
{ 
    istringstream stream(str);
    ostringstream result;
    transform(istream_iterator<string>(stream),
              istream_iterator<string>(),
              ostream_iterator<string>(result, " "),
              toPigLatin);
    return result.str();
}