【问题标题】:How to interleave strings by alternating chars?如何通过交替字符来交错字符串?
【发布时间】:2017-04-03 12:16:25
【问题描述】:

假设我有以下字符串

std::string st1 = "ab";
std::string st2 = "xyz";

我想通过交替字符来交错这些字符串,以便输出是

std::string output = "axbyz";

如果其中一个字符串比另一个长,则结果只是将较长字符串中剩余的字符串联起来。

如何在 C++ 中做到这一点?

我可以使用“+”连接。

【问题讨论】:

  • 那不是可以编译的代码,所以很难回答。但是,如果您有 std::string 类型,您可以使用 '+' 运算符连接它们。
  • 拿出一张白纸和一支笔。用简单明了的步骤写下执行此操作的逻辑算法。 After discussing your proposed algorithm with your rubber duck,一旦您的橡皮鸭同意您的算法有效,只需将其直接翻译成 C++。任务完成。
  • 好吧,您可以通过从每个字符串中一个接一个地获取字符,并将它们连接成一个新字符串来实现。你对这部分的哪一部分有困难?循环字符串?从给定索引处的字符串中获取字符?
  • 虽然我同意这个问题相当简单,但我看不出它“太宽泛”了。同样傲慢地告诉 OP“自己做”也很难鼓励新用户。
  • 合并多于连接...下一次,请至少展示一些解决问题的尝试。

标签: c++ string algorithm


【解决方案1】:

输出应交替每个字符串的字符:

std::string res = "";
for(int i = 0; i < std::max(a.size(), b.size()); i++){
    if (i < a.size())
       res += a[i];
    if (i < b.size())
       res += b[i];
}

【讨论】:

  • 为什么不简单:直接求和而不是循环?
  • 你最好希望你有一个高质量的编译器,它可以计算出std::max(a.size(), b.size()) 是一个常量,并且只需要计算一次,而不是每次循环迭代。
  • 因为 OP 希望字符 交替
  • string::size() 的复杂度为 O(1),提取它是过早的优化。
  • 哎呀!抱歉,我没有意识到他想要交替输出。
猜你喜欢
  • 2018-04-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-11
  • 2021-07-19
  • 2014-08-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多