我是靠谱客的博主 文艺溪流,最近开发中收集的这篇文章主要介绍USETCOJ1914数据大搜索,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

问题重述
一行字符串可能含有多个正整数, 请找出这些整数, 并输出它们的和.
Standard Input
有多组测试数据. 输入的第一行是整数T(1<=T<=100), 表示随后测试数据的组数. 每组测试数据占一行, 由一个可能含有空格的字符串构成, 该字符串可能含有多个数字子串, 每个数字子串的数字个数不超过16, 数字子串的个数不超过10, 字符串的长度不超过1000.
Standard Output
对应每组测试数据, 输出该字符串所包含整数的和. 如果该字符串没有包含数字, 请输出0.
在这里插入图片描述
解题思路
读入字符串string,一一遍历字符串的每一位,并再内嵌一个循环while,如果某一位是数字,那么检测下一位是不是数字,如果也是数字,则用num=num*10+s[i]-‘0’来表示组成的新数,以此类推。定义一个bool值flag,存在这样的数则flag=1,将这样的数存入一个数组中,记得将(flag=0&&num=0)初始化,再继续循环…
陷阱
1、读入的string中有空格!不可以简单地用cin>>s读入,我选择用的getline(cin,s)读入
2、由于在循环外部用cin读入了T,后面接的是读入string,所以输入T后的换行符’n’被读进第一个字符串,导致输出的第一组总是0!(占位了),所以一定要在cin>>T后先读一次string再进循环
3、每个数字子串的数字个数不超过16,如果数字的位数已经到16了,那么肯定超出了int的范围(int:-2147483648~+2147483647),这时开long long才满足要求!(三个地方:long long a[N],long long num,long long sum)由于数字子串的个数不超过10,所以存储数字子串的字符串不需要开太大了
代码如下:

#include<bits/stdc++.h>
#define N 11
using namespace std;
int main(){
	string s;
	int T;
	long long a[N];//注意了!
	cin>>T;
	getline(cin,s);//注意了!
	while(T--){
		getline(cin,s);
		int i,j=0;
		long long num=0;//注意了!
		bool flag=0;
		for(i=0;i<s.length();i++){
			while((s[i]>='0')&&(s[i]<='9')&&(i<s.length())){//核心循环
				num=10*num+int(s[i])-int('0');//核心算法
				i++;
				flag=1;
			}
			if(flag==1){
				a[j]=num;
				j++;
				flag=0;
				num=0;
			}
		}	
		int k=0;
		long long sum=0;//注意了!
		while(k<j){
			//cout<<a[k]<<" ";
			sum+=a[k];
			k++;
		}
		cout<<sum<<endl;
	}
	return 0;
}

最后

以上就是文艺溪流为你收集整理的USETCOJ1914数据大搜索的全部内容,希望文章能够帮你解决USETCOJ1914数据大搜索所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(41)

评论列表共有 0 条评论

立即
投稿
返回
顶部