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;
}

好了~本篇题解就到此为止咯!

相关