谁能告诉我我哪里错了
2023-08-11 18:53:48
发布于:浙江
在另一个网站都是正确的#include<bits/stdc++.h>
#include<cstring>
#include<cstdio>
using namespace std;
int main()
{
char a[10000];
cin>>a;
//qazwsxedc FGHAVZCDT
for(int i=0;i<strlen(a);i++){
if(a[i]<91&&a[i]>64){
a[i]+=32;
}
else if(a[i]<123&&a[i]>96){
a[i]-=32;
}
}
for(int i=0;i<strlen(a);++i){
if(a[i]=='x'){
a[i]='a';
}
else if(a[i]=='y'){
a[i]='b';
}
else if(a[i]=='z'){
a[i]='c';
}
if(a[i]=='X'){
a[i]='A';
}
else if(a[i]=='Y'){
a[i]='B';
}
else if(a[i]=='Z'){
a[i]='C';
}
else {
a[i]+=3;
}
}
for(int i=strlen(a)-1;i>=0;--i){
cout<<a[i];
}
return 0;
}
全部评论 2
在你的代码中,主要逻辑的错误出现在以下几个方面:
-
字符大小写反转问题:
你在转变大小写时只是简单地判断了字符范围,并进行了大小写转换。但你没有考虑到原文是大小写反转的要求。你只在判断字符是否是大写或小写时,进行了简单的转换。实际上,应该首先确保字符的大小写反转,然后再进行后续操作。 -
加密字符的移位操作错误:
在对字符进行移位时,你只处理了x
,y
,z
,X
,Y
,Z
的情况。实际上,应该对所有字母进行统一处理。你可以通过判断字母的 ASCII 值来确保正确的循环移位。 -
循环右移的问题:
字母的循环右移应该是通过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; }
解释:
-
大小写反转:
- 使用了
isupper
和tolower
来判断并转换大写字母为小写字母,或者小写字母为大写字母。
- 使用了
-
字母右移 3 个位置:
- 对每个字母,判断其是否是字母(
isalpha
),然后根据其大写或小写情况进行加密。对于大写字母,使用(a[i] - 'A' + 3) % 26 + 'A'
来处理循环右移;对于小写字母使用相同的方法。
- 对每个字母,判断其是否是字母(
-
字符串逆序:
- 使用了 C++ 标准库中的
reverse()
函数对字符串进行反转。
- 使用了 C++ 标准库中的
测试示例:
输入:
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
有帮助,赞一个