题解 P6051 【[RC-02] 求和】

· · 题解

一道基本的字符串练习题。

我们把整个字符串遍历一遍,看到数字就保存到变量sum中。如果前面的位置是数字,而本位不是,那就跳过,再把前面得到的数加起来,sum清零。

另外,再用一个bool变量来判断字符串里有没有数字,如果有则不输出。

代码如下:

#include<bits/stdc++.h>
using namespace std;
string s;
int n,sum;
bool flag,f;
int main()
{
    while(getline(cin,s)){
        n=sum=0;
        flag=false;
        f=false;
        for(int i=0;i<s.size();i++){
            if(s[i]>='0'&&s[i]<='9') f=true;//判断字符串有没有数字
            if(s[i-1]>='0'&&s[i-1]<='9'&&(s[i]<'0'||s[i]>'9')) continue;//数字在前面且该字符不是数字,跳过字符
            if(s[i]=='-'&&s[i+1]>='0'&&s[i+1]<='9') flag=true;//判断是否为负数
            if(s[i]>='0'&&s[i]<='9'){//如果为数字,保存到计数器里
                n=n*10+(s[i]-'0');
                if(s[i+1]<'0'||s[i+1]>'9'){
                    if(flag==true) n=-n,flag=false;
                    sum+=n,n=0;
                }
            }
        }
        if(f==true) cout<<sum<<endl;
    }
    return 0;
}

只求二字:

过和赞