栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++处理输入流中以逗号或者空格分隔的数据

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++处理输入流中以逗号或者空格分隔的数据

一、cin和getline同时使用易错点

当 cin 读取数据时,它会传递并忽略任何前导白色空格字符(空格、制表符或换行符)。一旦它接触到第一个非空格字符即开始阅读,当它读取到下一个空白字符时,它将停止读取。

在使用getline读入一整行时,若是前面是使用getchar()、cin这类读入了一个字母,但是不会读入后续换行’n’符号或者空格的输入时,再接getline()就容易出现问题。比如:

 
#include 
#include 
#include 
using namespace std;

int main()
{
    int num;
    cin>>num;// 读取了1,但是回车还留在数据流中

    // 如果没有下面这句话,str得不到准确的输入
    // str 输出为空
    cin.ignore();
    string str;
    getline(cin,str);
    cout << str.size() << endl;
    return 0;
}

这是因为输入数字之后,敲回车,产生的换行符仍然滞留在输入流了,接着就被getline(cin,s)给读进去了,此时的s=’n’,所以实际上s只是读入了一个换行符’n’。

二、读取以空格分割的数据 1.使用cin
// 读取以空格为分割的一行数据

#include 
#include 
#include 


using namespace std;
int main()
{
    int num;
    vector nums;
    while(cin >> num){// 遇到回车就停止输入
        nums.push_back(num);
        if(getchar()=='n') break;//只能放这里,不然会少了最后一个输入值
    }
    for(auto v : nums){
        cout< 
2.使用istringstream 
#include 
#include 
#include 

using namespace std;
int main()
{
    string str;
    getline(cin,str);
    istringstream in_str(str);
    vector nums;
    int num;
    while(in_str>>num){
        nums.push_back(num);
    }

    for(auto v : nums){
        cout< 
三、读取以逗号分割的数据 
// 读取以,分割的一行数据
// 输入: 1,2,3,4,5
// 输出 1 2 3 4 5 
#include 
#include 
#include 

using namespace std;
int main(){
    string str;
    getline(cin,str);
    stringstream ss(str);

    vector nums;
    char del = ',';// 分割符号为,
    string tmp;
    while (getline(ss, tmp, del)) {
        nums.push_back(stoi(tmp));
    }
    // 输出 1 2 3 4 5 
    for(auto v : nums){
        cout< 

那么可以写出分割以逗号为分割符的字符串提取函数:

// str 为输入字符串,del为分隔符,返回分割之后的字符串数组
vector split(string str, char del) {
    stringstream ss(str);
    string tmp;
    vector res;
    while (getline(ss, tmp, del)) {
        res.push_back(tmp);
    }
    return res;
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/529095.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号