当前位置:   article > 正文

C++输入_c++获取一整行用空格隔开的整数数组

c++获取一整行用空格隔开的整数数组


一、不需要数据行数

1.1、一行,以逗号分隔

输入:

1,2,3,4,5,66,77,88
  • 1

想得到:

1 2 3 4 5 66 77 88
  • 1

那么使用下面的代码,可以根据需要去掉不想要的代码

#include <iostream>
#include <vector>
#include <string>
#include <sstream>
//#include <bits/stdc++.h>
using namespace std;

int main() {
	vector<string> stringdata;	// 如果想获得以逗号分隔的字符串
	vector<int> intdata;             // 如果想获得以逗号分隔的整数
	string oneline;
	string tmp;
	while (cin >> oneline) {
		stringstream input(oneline);
		while (getline(input, tmp, ',')) {
			stringdata.push_back(tmp);
			intdata.push_back(stoi(tmp));
		}
	}
#ifdef DEBUG	
	for (auto i : stringdata)
		cout << i << " ";

	cout << "\n=====\n";

	for (auto i : intdata)
		cout << i << " ";
#endif
	return 0;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30

可以得到下面的结果,该方法同样适用于空格分隔的情况:
在这里插入图片描述
在这里插入图片描述
但是,如果多加一行输入,会把它们全都加入到最后的结果中,所以请酌情使用
在这里插入图片描述

1.2、一行,以空格分隔

输入:

11 2222 33 4 5 6
  • 1

在这里插入图片描述
请使用下面的方案:

#include <iostream>
#include <vector>
#include <string>
#include <sstream>
//#include <bits/stdc++.h>
using namespace std;

int main() {
	vector<string> stringdata;	// 如果想获得以逗号分隔的字符串
	vector<int> intdata;             // 如果想获得以逗号分隔的整数
	string oneline;
	string tmp;
	while (cin >> oneline) {
		stringstream input(oneline);
		while (getline(input, tmp, ' ')) {
			stringdata.push_back(tmp);
			intdata.push_back(stoi(tmp));
		}
	}
#ifdef DEBUG	
	for (auto i : stringdata)
		cout << i << " ";

	cout << "\n=====\n";

	for (auto i : intdata)
		cout << i << " ";
#endif
	return 0;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30

1.3、多行,以逗号分隔(万能,也适用于空格分隔)

输入:

3,2,3,555
1,2,3,4,5
2,3,4,5,6
1,2,3
  • 1
  • 2
  • 3
  • 4

在这里插入图片描述
请使用下面的方案:

#include <iostream>
#include <vector>
#include <string>
#include <sstream>
//#include <bits/stdc++.h>
using namespace std;

vector<int> split(const string &s, const char flag) {
	vector<int> res;
	istringstream iss(s);
	string tmp;
	while (getline(iss, tmp, flag))
		res.push_back(stoi(tmp));
	return res;
}

int main() {

	string oneline;
	vector<vector<int>> arr;
	while (getline(cin, oneline)) {
		vector<int> tmp = split(oneline, ',');
		arr.push_back(tmp);
	}

	cout << "===" << endl;

	for (auto i : arr) {
		for (auto j : i) {
			cout << j << " ";
		}
		cout << endl;
	}

	return 0;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36

1.4、多行,以空格分隔(万能,也适用于逗号分隔)

输入:

3 2 3 555
1 2 3 4 5
2 34 5 6
1 23
  • 1
  • 2
  • 3
  • 4

在这里插入图片描述
请使用下面的方案:


#include <iostream>
#include <vector>
#include <string>
#include <sstream>
//#include <bits/stdc++.h>
using namespace std;

vector<int> split(const string &s, const char flag) {
	vector<int> res;
	istringstream iss(s);
	string tmp;
	while (getline(iss, tmp, flag))
		res.push_back(stoi(tmp));
	return res;
}

int main() {

	string oneline;
	vector<vector<int>> arr;
	while (getline(cin, oneline)) {
		vector<int> tmp = split(oneline, ' ');
		arr.push_back(tmp);
	}

	cout << "===" << endl;

	for (auto i : arr) {
		for (auto j : i) {
			cout << j << " ";
		}
		cout << endl;
	}

	return 0;
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38

二、需要数据行数

2.1、行数、多行,以逗号分隔

输入:

3
1,2,3,4,5
2,3,4,5,6
1,2,3
  • 1
  • 2
  • 3
  • 4

想得到:

1 2 3 4 5
2 3 4 5 6
1 2 3
  • 1
  • 2
  • 3

那么使用下面的方案

#include <iostream>
#include <vector>
#include <string>
#include <sstream>
//#include <bits/stdc++.h>
using namespace std;

vector<int> split(const string &s, const char flag) {
	vector<int> res;
	istringstream iss(s);
	string tmp;
	while (getline(iss, tmp, flag))
		res.push_back(stoi(tmp));
	return res;
}

int main() {

	int n;
	cin >> n;
	vector<vector<int>> arr;
	for (int i = 0; i < n; ++i) {
		string s;
		cin >> s;
		vector<int> res = split(s, ',');
		arr.push_back(res);
		cin.get();
	}
#ifdef DEBUG
	cout << "===" << endl;

	for (auto i : arr) {
		for (auto j : i) {
			cout << j << " ";
		}
		cout << endl;
	}
#endif
	return 0;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40

可以得到正确的结果
在这里插入图片描述
在这种方法中,如果字符串之间以空格分隔,是不能得到正确结果的,如下图所示
在这里插入图片描述

2.2、行数、多行,以空格分隔

输入:

5
1 2 3 4 5 6
222 333
11 22 333
34 54 76 00 99
12 21
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

在这里插入图片描述
请使用下面的方案:

#include <iostream>
#include <vector>
#include <string>
#include <sstream>
//#include <bits/stdc++.h>
using namespace std;

vector<int> split(const string &s, const char flag) {
	vector<int> res;
	istringstream iss(s);
	string tmp;
	while (getline(iss, tmp, flag))
		res.push_back(stoi(tmp));
	return res;
}

int main() {

	string oneline;
	vector<vector<int>> arr;
	int n;
	cin >> n;
	cin.get();
	for (int i = 0; i < n; ++i) {
		getline(cin, oneline);
		vector<int> tmp = split(oneline, ' ');
		arr.push_back(tmp);
	}

	cout << "===" << endl;

	for (auto i : arr) {
		for (auto j : i) {
			cout << j << " ";
		}
		cout << endl;
	}

	return 0;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40

三、要得到不同的数组输入

3.1、输入多行,以逗号分隔,作为多个数组

输入:

1,2,3,4,5,6
222,333
  • 1
  • 2

在这里插入图片描述
请使用下面的方案:

#include <iostream>
#include <vector>
#include <string>
#include <sstream>
//#include <bits/stdc++.h>
using namespace std;

vector<int> split(const string &s, const char flag) {
	vector<int> res;
	istringstream iss(s);
	string tmp;
	while (getline(iss, tmp, flag))
		res.push_back(stoi(tmp));
	return res;
}

int main() {

	string oneline;
	cin >> oneline;
	vector<int> A = split(oneline, ',');
	cin >> oneline;
	vector<int> B = split(oneline, ',');


	cout << "===" << endl;
	cout << "vector A : ";
	for (auto i : A)
		cout << i << " ";

	cout << endl;

	cout << "vector B : ";
	for (auto i : B)
		cout << i << " ";
	return 0;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37

3.2、输入多行,以空格分隔,作为多个数组

输入:

1 2 3 4 5 6
222 333
  • 1
  • 2

在这里插入图片描述
请使用下面的方案:

#include <iostream>
#include <vector>
#include <string>
#include <sstream>
//#include <bits/stdc++.h>
using namespace std;

vector<int> split(const string &s, const char flag) {
	vector<int> res;
	istringstream iss(s);
	string tmp;
	while (getline(iss, tmp, flag))
		res.push_back(stoi(tmp));
	return res;
}

int main() {

	string oneline;
	getline(cin, oneline);
	vector<int> A = split(oneline, ' ');
	getline(cin, oneline);
	vector<int> B = split(oneline, ' ');


	cout << "===" << endl;
	cout << "vector A : ";
	for (auto i : A)
		cout << i << " ";

	cout << endl;

	cout << "vector B : ";
	for (auto i : B)
		cout << i << " ";
	return 0;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/305907
推荐阅读
相关标签
  

闽ICP备14008679号