摆脱白色空间(C )
Getting rid of white spaces (C++)
本文关键字:白色空间 更新时间:2023-10-16
我的代码允许用户输入数字,对其进行分类并按顺序输出。
示例输入: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;
}
我将使用 std::getline()
读取用户的全部输入,然后使用 std::istringstream
对其进行解析,例如:
#include <iostream>
#include <string>
#include <sstream>
#include <vector>
#include <algorithm>
void get_nums(std::vector<int> &num_vec)
{
std::string line, tokens;
std::getline(std::cin, line);
std::istringstream input(line);
while (std::getline(input, tokens, ','))
{
std::istringstream values(tokens);
int num;
if (!(values >> num))
continue;
values >> std::ws;
char ch = values.peek();
if (ch == '-')
{
values.ignore();
int num2;
if (!(values >> num2))
continue;
while (num <= num2)
num_vec.push_back(num++);
}
else if (ch == std::char_traits<char>::eof())
num_vec.push_back(num);
}
}
int main()
{
std::vector<int> num_vec;
std::cout << "n Please, enter your HW: " << std::flush;
get_nums(num_vec);
if (!num_vec.empty())
{
std::sort(num_vec.begin(), num_vec.end());
std::cout << "n Do Problems: ";
std::cout << num_vec[0];
for(int z = 1; z < num_vec.size(); ++z)
{
std::cout << ", ";
if ((z+1) == num_vec.size())
std::cout << "and ";
std::cout << num_vec[z];
}
}
else
std::cout << "n No Input! ";
return 0;
}
输入:25,1,3-6
输出:1,3,4,5,6,25
输入:25,1,3 - 6
输出:1,3,4,5,6,25
输入:2 5, 1 , 3- 6
输出:1,3,4,5,6
1
1 :2 5
在此代码中无效输入。如果愿意,除了逗号限制的数字外,还必须添加一些额外的代码来处理空格限制的数字。
相关文章:
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- 命名空间中具有.h和.cpp文件的类
- 从父命名空间重载类型
- 当在同一名称空间中有两个具有相同签名的函数时,会发生什么
- 在命名空间中定义函数还是限定函数
- C++:对不存在的命名空间使用命名空间指令
- 通过继承类使用来自不同命名空间的运算符
- 使用命名空间时出现多个定义错误
- OpenGL相机和相机空间转型的困惑
- CUDA内核和数学函数的显式命名空间
- 打印第二列时的2d字符矢量打印空间
- 嵌套的匿名命名空间
- CMakeLists.txt中的命名空间表示法
- 类是C++中的命名空间吗
- C 提升ifstream读取文件内容,带有白色空间,折断,标签等
- 从字符串中剥离白色空间
- 我如何使我的循环转到char*阵列的尽头,并将每个城市都放在链接的列表中(城市被划分为白色的空间)
- 命名课程中的白色空间
- 如何在cstdiofile中写白色空间
- 摆脱白色空间(C )