c++ - Pig Latin 字符串迭代,多个单词

标签 c++

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

基本上,我需要有关标准习语的帮助,以遍历字符串中的每个单词并对每个单词执行操作。

到目前为止,我所拥有的功能充其量只是马虎,我只是被卡住了。

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() 对不包含空格的单词执行正确的过程。

最佳答案

您可以将整个字符串放在 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 algorithms连同 stream 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();
}

关于c++ - Pig Latin 字符串迭代,多个单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12132013/

相关文章:

c++ - 对大小为 n 的数组进行排序

java - 查找给定输入的数据类型

c++ - C++中的二进制文件

c++ - '类' : illegal use of this type as an expression how do I fix it?

c++ - 在 Qt Creator 中使用表达式进行调试

c++ - 我该如何阅读以下声明?

c++ - 2038 年 32 位翻转 time()

c++ - 将一个信号连接到同一线程的两个插槽

c++ - 这个数组初始化是如何发生的?

c++ - 在函数内初始化 std::array