刷pat过程中的坑点

开贴记录刷pat过程中困扰我很久的、或者是发现的坑点。
2021/2/22
1、pat甲级1061 Dating
以为两个字符相加结果是串,比如以为’0’+'5’为”05“,其实是‘e’,因为‘0’的ASC码值为48,‘5’的ASC码值为53,ASC码值为101的字符恰好为‘e’。

#include <iostream>
#include <string>
using namespace std;
int main()
{
    
    
    string ans;
    char ch = '0';//定义字符变量ch为‘0’
    ans += ch + '5';将字符常量‘5’与字符变量ch相加,之后再将结果加到ans中
    cout<<ans;
    return 0;
}
//运行结果
e

2、甲级1005 Spell It Right
这道题挺简单的,但是在进行样例测试的时候,发现了一个坑点。
原代码是

#include <iostream>
#include <string>
#include <vector>

using namespace std;

int main()
{
    
    
    vector<string> py = {
    
    "zero","one","two","three","four","five" //注意,坑点在这里
                         "six","seven","eight","nine"};
    string str;
    cin>>str;
    int sum = 0;
    for(int i=0;i<str.size();i++) sum += str[i]-'0';
    string temp = to_string(sum);
    for(int i=0;i<temp.size();i++){
    
    
        if(i) cout<<' ';
        cout<<py[temp[i]-'0'];
    }
    return 0;
}

当输入测试样例12345时,发现运行结果为 one fivesix。这明显不对,因为,只需要输出one five即可,为什么输出了six呢?原来,在py中,"five"与"six"之间应该有一个逗号分隔,但是这里逗号没有了。出错了。
所以,如果遇到这种,需要自己额外的添加数据时,需要注意,添加要正确,比如说,标点符号要正确。

3、甲级1077 Kuchiguse
在做这道题时,遇到一个小问题。一般在输出结果是,需要根据某个条件的取值进行不同的输出,这样的话,一般喜欢使用三目运算符 A?B:C,即条件A成立时执行B语句,不成立时执行C语句。
在本题代码中,最后输出结果时使用了

cout<<ans.size()?ans:"nai";

本来想的意思是,如果ans.size()!=0,则输出ans,否则输出"nai",但是,事实上输出的是ans 的size()值,与设想的有很大的出入。
可以修改为

ans.size()?cout<<ans:cout<<"nai";

这才是根据ans.size()的取值进行选择输出。
不要复杂化输出

猜你喜欢

转载自blog.csdn.net/weixin_44321570/article/details/113942746
今日推荐