首页 > 解决方案 > 在每个元音上添加字符

问题描述

我之前有一个类似的问题并设法解决了它。现在我正试图向后做,这是我目前的代码。

基本上我希望最终结果为“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;
}


标签: c++string

解决方案


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;
    }
}

推荐阅读