测试点三和四没过,但是下载的数据测试点三偏移26,是原样输出的

P1914 小书童——凯撒密码

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


|