c++ - 在每个元音上添加字符
问题描述
我之前有一个类似的问题并设法解决了它。现在我正试图向后做,这是我目前的代码。
基本上我希望最终结果为“p5A5SSW5o5R5o5d”,但是当我运行它时,它只会找到密码第一部分中的第一个“o”,我需要它跳过它已经在之前和之后添加了 5 的元音至。
我希望每个元音(仅在当前字符串中包含 AOao,因为这就是出现在我的字符串中的所有元音),都有一个 5 作为前缀和后缀。它卡在第一个 o 并且不会继续到下一个 o。我创建了一个嵌套的 for 循环,这意味着它获取 encrypt-string 中的第一个字符,进入下一个 for 循环并循环遍历元音字符串中包含的每个元音,直到找到匹配项。否则,它会在第一个 for 循环处重新启动,但递增 1。首先它应该搜索字母“p”,第二次运行它应该搜索字母“A”,依此类推。
结果: p 5 A 5 SSW 55 o 55 rod
预期结果:p 5 A 5 SSW 5 o 5 R 5 o 5 d
最后,我还想旋转所有字符,但那是另一项任务,我想我可以使用 if 语句或 switch 来做到这一点。如果它以 5 结束,则什么也不做,否则旋转。
我希望我说清楚了,并为您提供了所有相关信息,否则只是在评论中大喊大叫。
提前致谢。
#include <string>
#include <sstream>
const string vowel = "AOao";
string encrypt, decrypt;
encrypt = "pASSWoRod";
decrypt = encrypt;
for (int i=0; i<encrypt.length(); i++){
for (int j=0; j<vowel.length(); j++){
if (encrypt[i] == vowel[j]){
decrypt.insert(decrypt.find(vowel[j]), 1, '5');
decrypt.insert(decrypt.find(vowel[j]) + 1, +1, '5');
}
}
}
return decrypt;
}
解决方案
find
,当没有证明一个起点时,总是找到第一个实例。
搜索和跟踪字符串长度以及您已经插入字符的位置比乍一看要困难得多(正如您所注意到的)。
从头开始构建结果,而不是将字符插入初始字符串。
另外,实现这个功能(实际实现留作练习):
bool is_vowel(char c);
接着
std::string encrypt = "pASSWoRod";
std::string decrypt;
for (auto c: encrypt)
{
if (is_vowel(c))
{
decrypt += '5';
decrypt += c;
decrypt += '5';
}
else
{
decrypt += c;
}
}
推荐阅读
- python - 按预定义时间选择一行并使用 Pandas 创建一个新的 DF
- javascript - 使用参数承载函数添加和删除事件侦听器
- overflow - UE3-UnrealScript throw:错误,[FunctionName] 的代码空间溢出 77 个字节
- javascript - 有没有办法在刚生成 Div 时将其标记为“新”,并在触摸后更改标志?
- javascript - 未调用 JavaScript 函数(Firebase 项目)
- spring - 如何在 Hibernate Criteria 中搜索嵌套属性
- python - 带有随机选择的python中的字典理解有时会丢失元素
- mysql - MYSQL, SELECT syntax problem, how do I select rows of a table based on a requirement in another table
- javascript - 如何从我的 get 请求中从 MongoDB 文档中提取正文?
- c# - 嵌套查询中的 C# Linq 联合集合