Mon code permet à l'utilisateur d'entrer des nombres, il les trie et les sort dans l'ordre.Se débarrasser des espaces blancs (C++)
entrée Exemple: 25,1,3-6
Exemple de sortie: 1,3,4,5,6,25
Toutefois, lorsque les entrées de l'utilisateur quelque chose comme 2 5,1,3-6
, et s'il y a un espace dans un cas comme 3 - 6
, le programme ne fonctionne pas.
J'ai utilisé cin>>ws;
pour essayer de me débarrasser des espaces, mais cela ne fonctionne pas.
Voici la partie du code lié à cette question (il y a quelques autres fonctions que je ne mentionnaient pas, à moins qu'ils ne semblent la source du problème):
#include <iostream>
#include <string>
#include <cctype>
#include <vector>
using namespace std;
void get_nums(vector<int>& num_vec);
int main()
{
int num1;
int num2;
cout << "\n Please, enter your HW: ";
vector<int> num_vec;
cin>>ws;
cout.flush();
do
{
cin>>ws;
cin>>num1;
num_vec.push_back(num1);
if(cin.peek() == ',')
{
cin.ignore();
}
else if(cin.peek() == '-')
{
cin.ignore();
cin>>num2;
for(++num1; num1<=num2; num1++)
{
num_vec.push_back(num1);
}
if(cin.peek() == ',')
{
cin.ignore();
}
}
}
while (cin.peek() != '\n');
cout<< "\n Do Problems: ";
for(int z=0; z<num_vec.size(); z++)
{
if(z+1==num_vec.size())
{
cout<<num_vec[z];
}
else if(z+2==num_vec.size())
{
cout<<num_vec[z]<<",and ";
}
else
{
cout<<num_vec[z]<<", ";
}
}
return 0;
}
Essayer d'utiliser des opérations d'entrée formatées de haut niveau rend les choses plus compliquées. Il sera beaucoup plus facile d'analyser ce type de caractère d'entrée par caractère. –
'operator >>' ignore déjà les espaces par défaut, donc utiliser 'std :: ws' est redondant, sauf si vous utilisez d'abord' std :: noskipws'. –