• 【C++】编程题遇到行数不固定的字符串(以逗号或空格分割)


    例题

    在程序员笔试当中,经常遇到ACM模式,会存在一些行数不固定的字符串,如下所示

    //逗号分割
    a,c,bb       
    f,dddd
    nowcoder
    
    //空格分割
    12 3       
    45
    0 0 0 0 0
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    每一行是一个string,以逗号分割子字符串。

    getline和cin的区别

    getline和cin都是可以读取字符串,但是cin读取字符串是以空格符、换行符、制表符为结束标志,getline是以换行符为读取标志。

    //以空格分割的一行字符串,“a1 b1 c1 d1”
    string s;
    cin>>s;				//读入第一个空格前面的字符串,“a1”
    getline(cin, s);	//读入一行,"a1 b1 c1 d1"
    
    //以逗号分割的一行字符串,“a1, b1, c1, d1”
    string s;
    cin>>s;				//读入一行,"a1, b1, c1, d1"
    getline(cin, s);	//读入一行,"a1, b1, c1, d1"
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    sstream

    sstream定义了读写内存string对象的类型,头文件是 #include。sstream头文件定义了三个类型来支持内存IO,这些类型可以向string写入数据,也能从string读取数据。istringstream从string读取数据,ostringstream向string写入数据,而stringstream即可从string读取数据,也能向string写数据(也是后面用到的)。通过stringstream ss(s); 可以声明stringstream对象,保存string s的一个拷贝。

    解决办法

    1.逗号分割的字符串

    代码的主要逻辑是:读入一行,处理一行,根据逗号把字符串分割,然后存储进vec数组里面,至于要装在一个数组还是多个数组,都可以自己更改。

    因为字符串是不固定行的,所以需要借助while循环读取,每个循环就是读取一行。注意前面包含的三个头文件。

    //逗号分割
    a,c,bb       
    f,dddd
    nowcoder
    
    #include
    #include
    #include
    string line;
    while (cin>>line){	//读入一行
        stringstream ss(line);                              
        string str;
        vector<string> vec;
        while(getline(ss, str,','))   //把字符串以逗号分开,读取每个string
            vec.push_back(str);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    2.空格分割的字符串

    主要是读入一行用的函数不一样。

    //空格分割
    12 3       
    45
    0 0 0 0 0
    
    #include
    #include
    #include
    string line;
    while(getline(cin,line)) {	 //依靠geline读入一行
       stringstream ss(line);    //每行先读入字符串,然后再区分每个数字
        int num;
        int sum=0;		
        while(ss>>num)
           sum += num;			//计算总和
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
  • 相关阅读:
    9、定义错误页
    Golang gorm manytomany 多对多 更新、删除、替换
    torch gpu
    【正点原子FPGA连载】第二十七章 MDIO接口读写测试实验 摘自【正点原子】DFZU2EG/4EV MPSoC 之FPGA开发指南V1.0
    扯什么kafka顺序消费,然后呢?古尔丹,代价是什么
    具有部分单调性的区间个数计数问题——考虑分治:GZOI2023Day1T3
    计算机网络学习记录 网络层 Day4(下)
    Android 基础知识4-2.2常用控件提示(Toast)
    数组 [数据结构][Java]
    SpringBoot实用开发之热部署
  • 原文地址:https://blog.csdn.net/wuwenbin12/article/details/126382811