//分割字符串中的数字:
//遍历这行字符串,直到找到不是为' '的字符,然后用temp记住第一个不是' '的字符的下标,
//然后继续遍历,直到找到下一个' '为止,然后记住第二个' '之前的字符的下标
#include <iostream>
#include <algorithm>
#include <string>
#include <cmath>
using namespace std;
int main()
{
string s[101];
string num[1000];
long long a[1000]={0};
int N,i,j,k,sum=0;
//**************************输入数据***************************
cin>>N;
char ch=cin.get(); //这里需要一个来接收enter,不然这个回车键就是s[0]的内容
for (i=0;i<N;i++)
getline(cin,s[i]);//string类数组的输入方法,可接受一个字符串,可以接收空格并输出
for (i=0;i<N;i++)
s[i]=s[i]+'\0';//为每行字符串添加一个\0作为结束符
//***********************分离出数字*******************************
for (i=0;i<N;i++)//遍历每一行字符串
{
j=0;//每行字符串的下标
int head=-1,tail=-1;//-1表示还没有符合的下标
while (s[i][j]!='\0')//遍历某行字符串,直到'\0'结束
{
if (s[i][j]!=' ' && head==-1) head=j;//head还没有装入下标时,优先装入head
if (s[i][j]!=' ' && head!=-1 ) tail=j;//当head已经装有下标时,再把下标装入tail
if (s[i][j]==' ' && head!=-1 && tail!=-1 || s[i][j+1]=='\0')
{
for (k=head;k<=tail;k++)
num[sum]=num[sum]+s[i][k];//把数字从原来字符串分离出来以后,存入num数组中
sum++;
head=-1;
tail=-1;
}
j++;
}
}
//**************************把字符串转换为数字并排序 ****************************
for (i=0;i<sum;i++)
{
int tempLen=num[i].length();
for (j=0;j<tempLen;j++)
a[i]=a[i]+(num[i][j]-'0')*pow(10,tempLen-1-j);
}
sort(a,a+sum);//对数字进行排序
//**********************找出断号和重号******************
int m,n;
a[sum]=a[sum-1]+1;
for (i=0;i<sum;i++)
{
if (a[i]==a[i+1]) n=a[i];//找出重号
if (a[i]==n) continue;//跳过重号
else if(a[i]-a[i+1]!=-1) m=a[i]+1;//找出断号
}
cout<<m<<' '<<n<<endl;
return 0;
}
蓝桥杯——错误票据
最新推荐文章于 2021-11-10 20:42:33 发布