P5733 自动修正
字符串题解第一弹~
[千万不能错过的原题连接](https://www.luogu.com.cn/problem/P5733)
今天就研究一下这道自动修正问题哈 首先,我们看到了小写转大写的时候,就知道该祭出字符界的大佬级选手ASCII来解决这道问题
然后又看到了一个非常关键的信息 字符串里不包含空格 那这样的话就可以轻轻松松的用printf来输入啦(但本人疑似用惯了cin和cout)
下面请出程序中的灵魂:
1. 输入数据(这是改变不了滴)
2. 将字符串利用下标筛选出没有变成大写的英文字符(注意关键语言if(a[i]>96&&a[i]<123))
3. 用(int)强制类型转换再将该字符的ASCII值-32
4. 把转换完的大写字母替换掉原来的字符
5. 输出 这里呢,我偷了一点懒,没错就是第四条(似乎再定义一个字符串占得不是程序内存,而是我的脑子),还有要注意的就是第二条,一定要用&&啊!!!千万不要只判定一个(而且第二条我也偷懒了,如有发现,欢迎评论)
梳理完步骤后,我很快就敲出了这个代码(借鉴群里某位人才的做法,我也不使Markdown里看的强迫症发晕的插入代码了)
#include#include using namespace std; int main() { char a[150]; int z; cin>>a; z=strlen(a); for(int i=0;i ){ if(a[i]>97&&a[i]<122) a[i]=(int)a[i]-32; } cout<<a; return 0; }
我满心欢喜的把代码提交上去,结果5个测试点全WA了!!!
我一看程序,直呼好家伙。。。
if语句把a和z给搞丢了。。。
所以赶紧补上,以下是AC代码
#include#include using namespace std; int main() { char a[150]; int z; cin>>a; z=strlen(a); for(int i=0;i ){ if(a[i]>96&&a[i]<123) a[i]=(int)a[i]-32; } cout<<a; return 0; }
好了~本篇题解就到此为止咯!