今天在做牛客的题目时遇到了一个输入输出的问题:字符串排序_牛客题霸_牛客网
有两种方式读取输入:
第一种是采用cin读取输入数据。cin遇到缓冲区中的[enter],[space],[tab]会结束当前输入,当有连续cin读入时[space],[enter],[tab]会全部舍弃。
网上多个版本说:“cin遇到缓冲区中的[enter],[space],[tab]会结束当前输入,并舍弃[enter],[space],[tab]“,对于这个描述持怀疑态度,应该是第一个cin遇到[enter],[space],[tab]时只会结束不会舍去,当第二个cin开始读缓冲区时,缓冲区还有[enter],[space],[tab]再舍去,读相应的数据。
int main() {
int N = 0;
cin >> N;
vector<string> nums;
for (int i = 0; i < N; ++i) {
string str;
cin >> str;
nums.push_back(str);
}
for (int i = 0; i < nums.size(); ++i) {
cout << nums[i] << endl;
}
}
第二种是采用cin+getline读取输入数据。getline读取时会读取上一行的回车,需要配合getchar使用。缓存区中的回车[enter],空格[space],getline读取时会看成字符。
int main() {
int N = 0;
cin >> N;
getchar(); //去除空格
vector<string> nums;
for (int i = 0; i < N; ++i) {
string str;
getline(cin, str);
nums.push_back(str);
}
for (int i = 0; i < nums.size(); ++i) {
cout << nums[i] << endl;
}
}
在调试时发现如果不使用getchar,for中第一次getline不需要输入数据,因为缓冲区中还存在[enter]。
之前遇到问题,或者学习过程作的笔记都记录在word,之后会往往边复习边把之前记录的内容发到博客上,算是记录一下这一年来转码人的学习历程吧。可惜,现在互联网行业发展不太行了。