字符串操作 - 混杂字符串 C++

Posted

技术标签:

【中文标题】字符串操作 - 混杂字符串 C++【英文标题】:String Manipulation - Jumble Strings C++ 【发布时间】:2016-11-04 22:41:52 【问题描述】:

各位程序员,大家好,我的作业是编写代码,该代码接受用户输入的字符串,然后用户选择如何操作该字符串,并在某些情况下将其打印到控制台。我的代码大部分都在编写和工作,但有几个函数我不明白如何编写。

其中一个选项应该采用字符串并显示字符串的“混乱版本”而不实际更改它。 (例如,每次选择该选项时,“Hello World!”变为“oleWrl !odlH”或任何其他随机变化。)

这是我现在拥有的函数,被我的教授接受,因为它改变了原始字符串本身。

std::string jumbleString(string str2)  //jumble
  string str = str2;
  random_shuffle(str.begin(), str.end());

  return str;

还有什么方法可以让我打乱/打乱并打印字符串以获得相同的结果?

编辑:添加了一个实际问题

对于任何格式不规范,我深表歉意,这是我第一次在这里发帖。感谢您的任何帮助。 :) 这个作业快把我逼疯了。

【问题讨论】:

不,它不会改变原件。您的教授非常糟糕地表达了他们希望您使用某种形式的循环。你的方式是大多数精通 C++ 的程序员处理程序的方式,所以请放心。 @StoryTeller 所说的非常真实。在现代 C++ 代码中,通常非常欢迎使用标准库的算法来替换手工编码的循环。 说了以上...这是一个问答网站,您的帖子实际上并不包含问题。 我很抱歉,我的意思是要求另一种方法,我可以做到这一点。顺便说一句,我更专注于格式 lmao @StoryTeller 我确实对你告诉我的内容感到安慰。谢谢,哈。 有趣的趣事:在std::string jumbleString(string str2) 参数str2 是按值传递的。 What's the difference between passing by reference vs. passing by value? 好问题。阅读链接并找出答案。无论如何,这很可能意味着str2 已经是源的副本,因此string str = str2; 没有任何用处。您可以在整个函数中安全地操作str2。阅读以上内容,因为您的教授消耗了过多的裂纹。 【参考方案1】:

嗯,你需要将每个字符映射到一个新位置...所以将每个原始位置映射到一个新位置:

using size_type = std::string::size_type;

std::vector<size_type> pos(str2.length());
size_type n = 0;
std::generate(begin(pos), end(pos), [&] return n++; );
std::shuffle(begin(pos), end(pos), std::rand);
for (auto i : pos)
  std::cout << str2[i];

【讨论】:

这非常有帮助,谢谢。就这样我明白这是在做什么;它只是将字符串中的每个字符重新分配到一个新位置,对吗? 是的。然后逐个字符打印出来。 谢谢,非常感谢。

以上是关于字符串操作 - 混杂字符串 C++的主要内容,如果未能解决你的问题,请参考以下文章

C++ WCHAR 操作

C++ 字符串拆分和操作

c++ 使用指针进行字符串操作,中间为空

C++ 轴对齐矩形操作向量和字符串

C++中如何对BYTE类型的字符串按位操作

C++学习(四三六)java字符串操作