文章

79

粉丝

221

获赞

46

访问

198.3k

头像
使用cin后立即使用getline会造成的问题
P1261 北京大学机试题
发布于2023年3月28日 17:11
阅读数 2.4k

#include <iostream>
#include <string>
using namespace std;

void BubbleSort(string* a, int n) {
	for (int i = 0, flag = 0; i < n; i++) {
		for (int j = 1; j < n - i; j++)
			if (a[j].size() < a[j - 1].size()) {
				swap(a[j], a[j - 1]);
				flag = 1;
			}
		if (flag == 0)
			break;
	}
}
int main() {
	int n;
	while (cin>>n) {
		string* a = new string[n];
		getline(cin, a[0]);
		for (int i = 0; i < n; i++) {
			getline(cin, a[i]);
			if (a[i] == "stop") {
				n = i;
				break;
			}
		}
		BubbleSort(a, n);
		for (int i = 0; i < n; i++)
			cout << a[i] << endl;
	}
	return 0;
}

使用cin后立即使用getline造成getline的值为"\n"直接赋值给字符串,可以选择在cin后使用cin.ignore();语句忽视本行输入,或者按照答主这样获取两遍字符串a[0]。

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发