如何在C ++中用相对的字母小写字母替换字符串中的每个字母小写字母?

问题描述

我想使用for循环找到相反的字母。另外,我想指出的是,我试图找到相反的字母。例如,将“ a”替换为“ z”,将“ b”替换为“ y” ...

例如,用户输入:“ 3 feg”,该程序的输出将是:“ uvt”。另外,我的约束是1

这是我的代码


    #include <iostream>
    #include <string>
    
    using namespace std;
    
    int main()
    {
        `int` user_input_number;
        string user_input_text;
    
        cout << "Type: ";
        cin >> user_input_number;
    
        cout << "Type: ";
        cin >> user_input_text;
    
        for(char i = 'a'; i <= 'z'; i++)
        {
         cout <<  << endl;
        }
        return 0;
    }
    
    
      

解决方法

这是一种使用ASCII算术的解决方案:

    string s = "abc";
    for(int i = 0; i < s.length(); i++){
        s[i] = 219 - s[i];
    }
    cout << s; // "zyx"

之所以起作用,是因为所有ASCII个字符都在0到127之间,这样值就可以循环返回

,
// Example program
#include <iostream>
#include <string>
#include <map>
using namespace std;

string encrypt(int n,string s) {
    map<char,int> alphabetMap = { };
    string alpha = "abcdefghijklmnopqrstuvwxyz";
    for (int i = 0; i < 26; i++){
        
        alphabetMap.insert({alpha[i],i});
        
    }
    string coded = "";
    for (int i  = 0; i < n; i++) {
        int index = alphabetMap[s[i]];
        coded += alpha[25 - index];
    }
    
    
    return coded;
}

int main()
{
    int n = 0;
    string s = "";
    cout << "Enter n and string: " ;
    cin >> n >> s;
    
    cout << encrypt(n,s) << endl;
    
    
}