c++ strstream

来源:互联网 发布:php网站文件管理 编辑:程序博客网 时间:2024/06/05 14:41
       终于刷完leetcode的easy题了,今天开始刷medium的537时点击打开链接,发现需要不断的将string和int类型相互转化,感觉写起来好麻烦。虽然过了,不过感觉快100行的代码实在是太复杂了,看了下别人的代码:
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();    }};

       居然还有这种操作···主要还是自己没掌握字符串流操作的精髓,如果想使用strstream要引入strstream头文件;类似的stringstream的头文件为sstream,这里主要介绍一下针对这道题的一些心得,关于区别和其他应用可能以后会提到。

       其中的buff吸首先收了第一个和整型不相关的字符“+”,之后吸收了“i”,从而让ra和ia中保留了a的实部和虚部。这里我对第一个“+”的过滤很好奇,而且之后如果出现了以“-”开头也会被判断为负数传入ia中。在本地跑了一些样例,代码很简单:

int main(){    string s;    cin>>s;    stringstream ss(s);    int a,b;    char c;    ss>>a>>c>>b;    cout<<a<<" "<<c<<" "<<b<<endl;    return 0;}
下面是几个例子分享给各位:

eg1:

input:111+222

output:111 + 222

eg2:

input:111-222

output:111 - 222

eg3:

input:111-+222

output:111 - 222

eg4:

input:111+-222

output:111 + -222

eg5:

input:111+++222

out:111 + 0


       看来样例5出现问题了,字符流流入int类型变量中,最多只能在前面携带一个“+”或“-”。

原创粉丝点击