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

6 篇文章 0 订阅
本文介绍了C++中处理逗号和空格分隔字符串的方法。通过getline与cin的区别,展示了如何利用stringstream分割逗号和空格分隔的字符串,并将它们存储到vector中。同时,讲解了stringstream的使用,包括读取和写入内存string对象。示例代码详细解释了如何处理不固定行数的字符串输入。
摘要由CSDN通过智能技术生成

例题

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

//逗号分割
a,c,bb       
f,dddd
nowcoder

//空格分割
12 3       
45
0 0 0 0 0

每一行是一个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"

sstream

sstream定义了读写内存string对象的类型,头文件是 #include<sstream>。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<sstream>
#include<string>
#include<iostream>
string line;
while (cin>>line){	//读入一行
    stringstream ss(line);                              
    string str;
    vector<string> vec;
    while(getline(ss, str,','))   //把字符串以逗号分开,读取每个string
        vec.push_back(str);
}
2.空格分割的字符串

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

//空格分割
12 3       
45
0 0 0 0 0

#include<sstream>
#include<string>
#include<iostream>
string line;
while(getline(cin,line)) {	 //依靠geline读入一行
   stringstream ss(line);    //每行先读入字符串,然后再区分每个数字
    int num;
    int sum=0;		
    while(ss>>num)
       sum += num;			//计算总和
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值