0
私のコードでは、数字を入力して並べ替え、順に出力することができます。空白を取り除く(C++)
例入力:25,1,3-6
出力例:1,3,4,5,6,25
ただし、ユーザーが2 5,1,3-6
のようなものを入力し、3 - 6
ような場合にスペースがある場合、プログラムが動作しないとき。
私はcin>>ws;
を使用して空白を取り除こうとしましたが、動作しません。ここで
は(彼らは問題の原因に思えない限り、私は含まれていなかったいくつかの他の機能は、ある)、この問題に関連したコードの一部です:
#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;
}
ここで高水準の書式設定された入力操作を使用しようとすると、操作が複雑になります。このような入力文字を文字単位で解析する方がはるかに簡単です。 –
'operator >>'はデフォルトで空白をすでに無視しているので、 'std :: noskipws'を先に使用しない限り、' std :: ws'を使うのは冗長です。 –