字符串操作 - 混杂字符串 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++的主要内容,如果未能解决你的问题,请参考以下文章