开贴记录刷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()的取值进行选择输出。
不要复杂化输出