1

我正在阅读一本关于 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() 对不包含空格的单词执行正确的过程。

4

1 回答 1

4

您可以将整个字符串放在一个字符串流中使用提取运算符来取出一个单词:

#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();
}

另一种方法是将标准算法流迭代器一起使用:

#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();
}
于 2012-08-26T16:56:25.673 回答