stringstream分割字符与类型转换用法:
#include <iostream>
#include <sstream>
#include <vector>
using namespace std;
int main(){
// string s;
// getline(cin,s);
/**********如果输入是以其他符合分割(如逗号等),先利用getline(ss, word,',')分割成string,再通过ss2转换成int类型***********/
//-----------分割字符----------------------
string s1="1,2,3,4,5,6";
//string s1="hello,my,name,is,C++";
stringstream ss(s1);
string word;
vector<string>v;
while(getline(ss, word,','))
v.push_back(word);
//如果只要string类型截止到上面,如果还要把string转int,采用下面方法
//-----------类型转换----------------------
vector<int> Output;
//法一:利用stringstream实现类型转换
stringstream ss2;
int num;
vector<string>::iterator it;
for(it=v.begin();it!=v.end();++it){
ss2<<*it;
ss2>>num;
ss2.clear(); //使用同一个stringstream不要忘记清除
Output.push_back(num);
}
//法二:采用atoi函数将string转成int
// vector<string>::iterator it2;
// for(it2=v.begin();it2!=v.end();++it2)
// Output.push_back(atoi((*it2).c_str()));
//输出
for(auto e:Output)
cout<<e<<endl;
/**********如果输入是以空格符号分割,将string转换成int,可以直接使用下面操作**********/
// string s3="1 2 3 4 5";
// stringstream ss(s3);
// vector<int>vv;
// int num;
// while(ss>>num)
// vv.push_back(num);
// vector<int>::iterator iter;
// for(iter=vv.begin();iter!=vv.end();++iter){
// cout<<*iter<<endl;
// }
return 0;
}
LeetCode题目详解
Input: "1+1i", "1+1i"
Output: "0+2i"
Explanation: (1 + i) * (1 + i) = 1 + i2 + 2 * i = 2i, and you need convert it to the form of 0+2i.
class Solution {
public:
string complexNumberMultiply(string a, string b) {
int ra, ia, rb, ib;
char buff;
stringstream aa(a), bb(b), ans;
aa >> ra >> buff >> ia >> buff;//拆分
bb >> rb >> buff >> ib >> buff;
ans << ra*rb - ia*ib << "+" << ra*ib + rb*ia << "i";//组合
return ans.str();
}
};
stringstream类型转换的时候,一直读到第一个不符合类型的字符为止。因此 空格 + - 会成为字符串参数的内部分界,例子中对ra,ia对象的输入”赋值”操作证明了这一点,字符串的空格成为了整型数据与符号数据的分解点,利用分界获取的方法我们事实上完成了字符串到整型对象与符号对象的拆分转换过程
参考链接:https://blog.csdn.net/qq_34244317/article/details/78070883