Pensando en ingresar varias líneas de números indefinidos en C ++

Es inconveniente utilizar las sentencias while (cin >> / *? * /) Para ingresar varias líneas de números indefinidos. Una vez que se ingresa Ctrl-Z, la entrada finalizará. Solo se puede ingresar correctamente un conjunto de información y el siguiente conjunto no se puede ingresar. .
Busqué muchos métodos diferentes en Internet y encontré un método más efectivo a continuación. (Después de la mejora, se almacena en el vector (también hay métodos en la matriz en Internet)) A
continuación, se proporcionan métodos de procesamiento en main y header :

En principal

Tome C ++ Primer Ejercicio 3.36 (b) (es decir, compare el vector) como ejemplo:

#include <iostream>
#include <vector>
#include <string>
#include <sstream> // std::istringstream
using namespace std;

int main()
{
    
    
	vector<int> vint1, vint2;
	string num1, num2;
	cout << " First vector:";
	getline(cin, num1);
	istringstream is1(num1);
	int i;
	while (is1 >> i)
		vint1.push_back(i);
	cout << "Second vector:";
	getline(cin, num2);
	istringstream is2(num2);
	int j;
	while (is2 >> j)
		vint2.push_back(j);
	if (vint1.size() != vint2.size())
		cout << "vint1 is unequal to vint2" << endl;
	else
	{
    
    
		int s=0;
		auto it1 = vint1.begin();
		auto it2 = vint2.begin();
		for (int k = 0; k != vint1.size(); k++)
		{
    
    
			if (*it1 == *it2) s++;
			++it1;
			++it2;
		}
		if (s == vint1.size())
			cout << "vint1 is equal to vint2" << endl;
		else cout << "vint1 is unequal to vint2" << endl;
	}
	return 0;
}

La parte clave (L12-16) es

	getline(cin, num1);
	istringstream is1(num1);
	int i;
	while (is1 >> i)
		vint1.push_back(i);

La biblioteca sstream es necesaria para lograr la función isringstream .
Por supuesto, debe usar la instrucción while para almacenarlo en el vector de forma continua. De lo contrario, solo se almacenará el primer número del contenido de la cadena obtenido después de getline.

En el encabezado

A continuación se define la función en un vector de fila de enteros cinvec_int y números de punto flotante en un vector de fila de cinvec_double .

#ifndef CINVEC
#define CINVEC
#include <iostream>
#include <vector>
#include <string>
#include <sstream> // std::istringstream

std::vector<int> cinvec_int(std::string cin_int)
{
    
    
	getline(std::cin, cin_int);
	std::vector<int> vint;
	std::istringstream is(cin_int);
	int i;
	while (is >> i)
		vint.push_back(i);
	return vint;
}

std::vector<double> cinvec_double(std::string cin_double)
{
    
    
	getline(std::cin, cin_double);
	std::vector<double> vdou;
	std::istringstream is(cin_double);
	double i;
	while (is >> i)
		vdou.push_back(i);
	return vdou;
}
#endif // !CINVEC

Ver también

Página de navegación de Teddy van Jerry
[Ejercicio básico de C ++ (5ª edición)] Programa de ejercicios-Capítulo 3 (Capítulo 3) [ Ejercicio básico de
C ++ (5ª edición)] Programa de ejercicios-Capítulo 5 (Capítulo 5)

Supongo que te gusta

Origin blog.csdn.net/weixin_50012998/article/details/108169209
Recomendado
Clasificación