【问题标题】:How can I replace every alphabetical lower case letter in a string with its opposite alphabetical lower case letter in C++? [closed]如何在 C++ 中用相反的小写字母替换字符串中的每个小写字母? [关闭]
【发布时间】:2026-01-29 05:20:07
【问题描述】:

我想使用 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;
    }
    
    
      

【问题讨论】:

  • 提示:一个查找表,它只是一个字符数组,或者换句话说......一个字符串。
  • 输入xyz的输出是什么?
  • 请展示您尝试过的内容并指出您遇到的问题。
  • 那么你如何处理不是小写字母的字符?它们是原封不动还是被你丢弃了?
  • 如果输入是“feg”,输出怎么可能是“uvq”? “feg”是三个连续的字母,但 q 与 u 和 v 不连续,所以这没有意义吗?输出不应该是“uvt”吗?

标签: c++ for-loop if-statement


【解决方案1】:

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

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

它起作用的原因是所有ASCII字符都在0到127之间,这样值就会循环回来

【讨论】:

  • @PeteBecker,你是对的。
【解决方案2】:
// 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;
    
    
}


【讨论】:

    最近更新 更多