方法一:
公式法:
#include <bits/stdc++.h>
using namespace std;
int main()
{
string s;
getline(cin, s);
for (auto &c : s)
if (c >= 'a' && c <= 'z') c = (c - 'a' + 1) % 26 + 'a';
else if (c >= 'A' && c <= 'Z') c = (c - 'A' + 1) % 26 + 'A';
cout << s << endl;
return 0;
}
方法二:
自动算空格法:
注意:P用scanf不会过滤空格哦!
#include<bits/stdc++.h>
using namespace std;
int main(){
char ch;
while(scanf("%c",&ch)==1){
if(ch>='a'&&ch<='z')
ch=(ch+1-'a')%26+'a';
else if(ch>='A'&&ch<='Z')
ch=(ch+1-'A')%26+'A';
cout<<ch;
}
return 0;
}
方法三:
不动脑子法
#include<bits/stdc++.h>
using namespace std;
int main(){
string a;
getline(cin,a);
for(int i=0;i<a.size();i++){
if(a[i]>='a'&&a[i]<'z'||a[i]>='A'&&a[i]<'Z')
a[i]++;
else if(a[i]=='z'||a[i]=='Z')a[i]-=25;
}
cout<<a<<endl;
return 0;
}
我是不动脑子法 哈哈哈
我一开始 也是不懂脑子法啊哈哈哈哈
#include[HTML_REMOVED]
using namespace std;
int main(){
string s;
getline(cin,s);
char a[]={‘a’,’b’,’c’,’d’,’e’,’f’,’g’,’h’,’i’,’j’,’k’,’l’,’m’,’n’,’o’,’p’,’q’,’r’,’s’,’t’,’u’,’v’,’w’,’x’,’y’,’z’};
char b[]={‘A’,’B’,’C’,’D’,’E’,’F’,’G’,’H’,’I’,’J’,’K’,’L’,’M’,’N’,’O’,’P’,’Q’,’R’,’S’,’T’,’U’,’V’,’W’,’X’,’Y’,’Z’};
}
#include[HTML_REMOVED]
using namespace std;
int main(){
string s;
getline(cin,s);
}
#include[HTML_REMOVED]
using namespace std;
int main(){
string s;
getline(cin,s);
char a[]={‘a’,’b’,’c’,’d’,’e’,’f’,’g’,’h’,’i’,’j’,’k’,’l’,’m’,’n’,’o’,’p’,’q’,’r’,’s’,’t’,’u’,’v’,’w’,’x’,’y’,’z’};
char b[]={‘A’,’B’,’C’,’D’,’E’,’F’,’G’,’H’,’I’,’J’,’K’,’L’,’M’,’N’,’O’,’P’,’Q’,’R’,’S’,’T’,’U’,’V’,’W’,’X’,’Y’,’Z’};
}
为啥a[i]-25
这里加减运算就是ASCII值计算,加的话从z到a的循环不好理解,但是26个字母是确定的,所以,直接减去好运算也好理解
for (auto &c : s),这个怎么理解?
foreach 循环 auto 自动判定类型
好的谢谢
可以解释一下方法一的公式法的
if (c >= 'a' && c <= 'z') c = (c - 'a' + 1) % 26 + 'a';
这个为什么要%26吗?因为z下一个就回到a了呀宝贝
<宝贝>你真的 我哭死
我的比不动脑子法还不动脑子,嗨嗨害,z->a,Z->A
为什么方法二scanf这样用可以读取空格,我记得scanf不是一遇到空格就停止读入了么
同问
scanf不是这样的
特判好啊哈哈哈哈
scanf(“%c”,&ch)==1
这个是什么意思?求大佬解
scanf输入成功后会返回1输出失败返回0,输入内容到缓冲区
那这样可以读取空格么
哈哈哈不动脑子法
不动脑子法好啊,不过我没脑子【滑稽】
惊呆!!!
斗宗强者恐怖如斯
过奖了
# nb
过奖了
秀啊
过奖了
B
啥意思?
### NB
hh,谢谢
# NB
过奖了