全部评论 2

  • 在你的代码中,主要逻辑的错误出现在以下几个方面:

    1. 字符大小写反转问题:
      你在转变大小写时只是简单地判断了字符范围,并进行了大小写转换。但你没有考虑到原文是大小写反转的要求。你只在判断字符是否是大写或小写时,进行了简单的转换。实际上,应该首先确保字符的大小写反转,然后再进行后续操作。

    2. 加密字符的移位操作错误:
      在对字符进行移位时,你只处理了 x, y, z, X, Y, Z 的情况。实际上,应该对所有字母进行统一处理。你可以通过判断字母的 ASCII 值来确保正确的循环移位。

    3. 循环右移的问题:
      字母的循环右移应该是通过 char 的 ASCII 值来操作,而不是仅仅对特定字符(如 'x'、'y')进行硬编码。

    下面是修正后的代码:

    #include<bits/stdc++.h>
    using namespace std;
    
    int main() {
        string a;
        cin >> a;
        
        // 1. 大小写反转
        for (int i = 0; i < a.size(); i++) {
            if (isupper(a[i])) {
                a[i] = tolower(a[i]);
            } else {
                a[i] = toupper(a[i]);
            }
        }
    
        // 2. 字母右移3个位置
        for (int i = 0; i < a.size(); i++) {
            if (isalpha(a[i])) {
                // 大写字母
                if (isupper(a[i])) {
                    a[i] = (a[i] - 'A' + 3) % 26 + 'A';
                }
                // 小写字母
                else {
                    a[i] = (a[i] - 'a' + 3) % 26 + 'a';
                }
            }
        }
    
        // 3. 字符串逆序
        reverse(a.begin(), a.end());
    
        // 输出结果
        cout << a << endl;
    
        return 0;
    }
    

    解释:

    1. 大小写反转:

      • 使用了 isuppertolower 来判断并转换大写字母为小写字母,或者小写字母为大写字母。
    2. 字母右移 3 个位置:

      • 对每个字母,判断其是否是字母(isalpha),然后根据其大写或小写情况进行加密。对于大写字母,使用 (a[i] - 'A' + 3) % 26 + 'A' 来处理循环右移;对于小写字母使用相同的方法。
    3. 字符串逆序:

      • 使用了 C++ 标准库中的 reverse() 函数对字符串进行反转。

    测试示例:

    输入:

    GSOOWFASOq
    

    输出:

    Trvdizrrvj
    

    这段代码应该能满足题目的要求,进行正确的加密并输出结果。

    2025-02-07 来自 浙江

    0
  • #include<bits/stdc++.h>
    using namespace std;
    int main(){
    int z;
    string a;
    cin>>a;
    for(int i=0;i<a.size();i=i+1){
    a[i]=a[i]+3;
    if(a[i]>'z'){
    a[i]=a[i]-26;
    }
    if(a[i]>'Z' && a[i]<'a'){
    a[i]=a[i]-26;
    }
    }
    reverse(a.begin(),a.end());
    for(int i=0;i<a.size();i=i+1){
    if(a[i]>='A' && a[i]<='Z'){
    cout<<char(a[i]+32);
    }
    else{
    cout<<char(a[i]-32);
    }
    }
    return 0;
    }

    2025-02-07 来自 北京

    0
首页