1. 起因
今天(2021-08-15)做米哈游的笔试:
题目:
假设刚开始字符串为空,可以在字符串任意位置加上"ab",请你输入一个字符串,只含有'a'和'b',
请你判断是不是能把一个空字符串变为目标字符串 s。可以输出"YES",不可以输出"NO"。
第一行输入 t:样例数目
之后t行: 每一行输入一个目标字符串 s。(1<=s.length<=100)
eg:
3
aabba
NO
aabb
YES
ab
YES
本来思路对的,结果栽在了 getline
函数中。
2. getline() 的错误:
- 先直接写关键部分:
#include <bits/stdc++.h>
using namespace std;
int main(){
// t 组数据
int t{};
cin >> t;
// 输入数据
for (int i = 0; i < t; i++) {
string temp{};
getline(cin, temp);
cout << (int)(temp[0]) << endl;
}
return 0;
}
输出:
- 但是:我输入2
并没有要输出的意思!!!,但它输出了一个 0
。而ASCII 码中,0
对应控制字符NUT
,也就是读取了我不想读的值。
-
输入
ab
输出字符串第一个 值a
的对应数字97
,这就是对的。 -
修改:所以这里用
cin
要比getline
要稳妥。
#include <bits/stdc++.h>
using namespace std;
int main(){
// t 组数据
int t{};
cin >> t;
// 输入数据
for (int i = 0; i < t; i++) {
string temp{};
cin >> temp;
cout << (int)(temp[0]) << endl;
}
return 0;
}
- 输出:
3. 附上我做题的错误,和修改后的代码:
错误(输入一个2
,就输出结果,错在 getline
的使用):
- 改为
cin
就通过了:
4. 总结:
- 血泪:笔试时没做出来。下来的时候改正的。
- 下次笔试的时候要注意!!!!记得!!!!