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
- Consulte [Ejercicio básico de C ++ (5ª edición)] Programa de ejercicios-Capítulo 5 (Capítulo 5) Ejercicio 5.17 para llamar a este encabezado .
- Depurando mucho antes de que tengan éxito, vea mi blog depurando cinvec.h (funciones definidas de archivos de encabezado de C ++) sentimientos y experiencias .
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)