1147: 今天,你AC了吗(C版)

题目描述
假设一个字符串中连续的若干数字字符可以认为是一个整数,现在给定一个字符串,请从中找出所有的正整数并求和输出。

比如,第一个样例“a23badfr21,3”中包含3个正整数,分别是23、21和3,所以最后要输出的和应该是47;而第二个样例“I-Love-NMG”中没有任何整数,所以应该输出0。

特别说明,题目保证所有求和的结果在32位整数范围之内。

够简单吧——这里想问问各位:今天,你AC了吗?

输入
输入数据首先包含一个正整数T(0<T<=20),表示有N组测试用例,接下来的N行是N组测试数据,每行包含一个长度不超过100的字符串,不为空串且字符均是ASCII可见字符。

输出
对于每组测试数据,请对所有的正整数求和输出,每组输出占一行。

样例输入
2
a23badfr21,3
I-Love-NMG
样例输出
47
0
提示
来源


解析:本题的考点在于从字符串中提取数字,并且有处理连续的数字。思路很简单,循环遍历字符串,如果遇到一个字符是数字(ASCII码在48到57之间),先不着急累加,看看它后面还没有有数字,有一个就将该数字乘以十,然后继续判断…最后在利用累加器累加;

代码:

#include <stdio.h>
int main()
{  int n;
   int H=0,L=0,sum=0;
   char str[102];
   while(scanf("%d",&n)!=EOF)
   {
       for(int j=0;j<n;j++)
       {
           scanf("%s",&str);//此处不能使用gets(),gets()会将测试数据时的回车视为字符,导致输入完测试的组数以后,第一次会看似莫名其妙的出现一个“0”;
            int len=strlen(str);
            for(int i=0;i<len;i++)
            {
               if(str[i]>='0' && str[i]<='9')
               {
                    H=str[i]-48;
                    while(1)
                    {   L++;
                        if(str[i+L]>='0' && str[i+L]<='9') H*=10;
                        //用i+L的方式寻找数字后面的字符,判断其是否为数字
                        else{L=0;break;}
                    }
                    sum+=H;
               }
            }
             printf("%d\n",sum);sum=0;
       }
   }
    return 0;
}

2020年2月13日初写
(现在已经0点了????今天还什么都没做呢。。。。。好吧,在这里希望疫情早点过去,武汉加油!中国加油!还有,其实我不是很想刷网课的啊QAQ)

发布了33 篇原创文章 · 获赞 8 · 访问量 1817

猜你喜欢

转载自blog.csdn.net/HJS1453100406/article/details/104289250