ASCII码最大是127,但是如果越界了再减26行吗,测试点的数据显示是一样的,但是用vscode跑是会出现中文乱码。
by Answerexploer @ 2024-03-11 19:55:58
@[Answerexploer](/user/945635) 你为啥要多一个字符数组?用字符串操作应该会对
```cpp
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n;
cin>>n;
string str;
cin>>str;
for(int i=0;i<s.length();i++)
{
if(str[i]+n>'z')
cout<<char(n+str[i]-26);
else
cout<<char(str[i]+n);
}
return 0;
}
```
by wyxrl @ 2024-03-11 20:12:37
@[wyxrl](/user/1266960) 啊,我只用了字符串吧,用[]是为了访问字符串中的每一个元素。
by Answerexploer @ 2024-03-12 09:50:37
@[Answerexploer](/user/945635) 那你的```
char a[str.size()];```是啥。
by wyxrl @ 2024-03-12 20:29:41
@[wyxrl](/user/1266960) 但是对一个字符串怎么移位操作,都需要拆开成一个字符处理吧。所以这个字符数组应该不是主要矛盾吧。
by Answerexploer @ 2024-03-13 18:58:03
@[Answerexploer](/user/945635) 本蒟蒻又找得到这个了,亲测60变80,要加特判(虽然我不知道为什么)
```cpp
if(n==26)
{
cout<<str;
return 0;
}
```
by wyxrl @ 2024-03-13 19:29:40
@[wyxrl](/user/1266960) 这个就是测试点三,第三个测试点偏移量是26,你的特判正好通过了,避免了加n后的中文乱码,我感觉应该还是要提防越界吧,可能越界了char表示的数字就乱了?别想了,我早就用模26去了。
by Answerexploer @ 2024-03-13 20:04:04
```c
#include<bits/stdc++.h>
using namespace std;
int main(){
int n;
cin>>n;
string s;
cin>>s;
int l=s.size();
for(int i=0;i<l;i++){
int a=int(s[i])+n;
if(a>'z'){
cout<<char((a%'z')+'a'-1);
}else{
cout<<char(a);
}
}
return 0;
}
by xhl_leo @ 2024-04-03 16:40:25
~~求个关注~~
by xhl_leo @ 2024-04-03 16:42:11