题目难度:一星
考察点:字符串、模拟
方法:模拟
1.分析:
我们分析一下题意发现这个题其实本质上就是求一个表达式的输出结果,这个表达式的计算符号只包含"+"和"-"。那么我们只要找出这个字符串中所包含的所有的整数(正数和负数),然后加起来即可。为什么是”加“起来,因为前面说了整数包含正数和负数,那么我们把负数也做一个整数就可以了。举个例子: “1+2-3”
在上述例子中出现了三个整数分别是1, +2, -3 ,那么显然结果就是ans = 1 + (+2) + (-3)。
这里我在介绍一个非常好用的类stringstream 它可以将读入的字符串转化为整数,正数和负数都可以转化,有了这个类其实题目就变的很简单了,那么就简单介绍一下这个类的用法。
stringstream类同时可以支持串流的输入输出操作,定义一个stringstream,它有两个操作符">>"和"<<":其中>>是用来从stringstream对象中读取一些内容,<<是向stringstream对象添加字符串。
在举个例子:如果定义了一个stringstream ss,然后有一个字符串s="1",那么首先我将ss<<s,即向stringstream对象ss中添加一个字符串s,然后在定义一个整型变量x,进行一次ss>>x,即将stringstream对象中的字符串转为了整型变量赋给x,此时实现了从字符串到整型的转化,即如下代码:
string s = "1"; stringstream ss; ss<<s; int x; ss>>x; cout<<x+2<<endl;
算法实现:
(1). 输入字符串s
(2). 定义一个stringstream对象ss(s),意思等价于,ss<<s;
(1). 输入字符串s
(2). 定义一个stringstream对象ss(s),意思等价于,ss<<s;
(3). 然后一直读整数x(无论是整数还是负数),结果ans+=x;
(4). 输出ans即可。
空间复杂度:O(n) 3.代码:
(4). 输出ans即可。
2.复杂度分析:
时间复杂度:O(1)空间复杂度:O(n)
3.代码:
#include <bits/stdc++.h> using namespace std; typedef long long LL; int main() { string s; cin>>s; stringstream ss(s); int ans = 0, x; while(ss>>x) ans+=x; cout<<ans<<endl; return 0; }