【问题标题】:Pig Latin string iteration, multiple word猪拉丁字符串迭代,多个单词
【发布时间】:2012-08-26 16:52:19
【问题描述】:

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

【问题讨论】:

标签: c++


【解决方案1】:

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

【讨论】:

  • & 是通过引用传递的吗?我是 C++ 新手,被参数中的 (const 和 &) 弄糊涂了。 & 是通过 ref 传递的,对吗?但是 const 是不能改变的?
  • 正确。您可以通过这种方式避免潜在的昂贵副本。无论如何,Stringstream 会在它自己的缓冲区中复制字符串。
猜你喜欢
  • 2023-04-03
  • 1970-01-01
  • 1970-01-01
  • 2014-06-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多