原题如下:
输入一个字符串,求该字符串中最长连续数字序列出现的起始位置及其长度。
输入格式:
输入一个字符串,可包含空格。
输出格式:
输出内容:最长数字序列起始位置和长度空格隔开。输出尾部不能有空格。输入空串,输出"NULL"
输入样例:
123ab12345a
输出样例:
5 5
这个题的意思其实只是找出字符串中最长的数字序列即可,而数字序列不一定是连续的......开始的时候误解了题的意思,以为数字序列也是连续的,所以一直无法通过测试....
正确代码如下:
#include<stdio.h>
#include <iostream>
#include<string>
using namespace std;
int main()
{
string s;
getline(cin,s);
int maxindex = 0,maxlen = 0;
int len = 0;
if(s.length()==0)
{
cout << "NULL";
return 0;
}
for(int i = 0;i < s.length();i++)
{
if(s[i]>='0'&&s[i]<='9')
{
len++;
if(s[i+1]=='\0')
{
maxlen = len;
maxindex = i-len+1;
}
}
else
{
if(len >= maxlen)
{
maxlen = len;
maxindex = i-len;
}
len = 0;
}
}
printf("%d %d",maxindex,maxlen);
return 0;
}
既然都已经写了读取连续数字序列的代码,也贴到这了...
#include<stdio.h>
#include <iostream>
#include<string>
using namespace std;
int main()
{
string s;
getline(cin,s);
int maxindex = 0,maxlen = 0;
int len = 0;
if(s.length()==0)
{
cout << "NULL";
return 0;
}
for(int i = 0;i < s.length();i++)
{
if(s[i]>='0'&&s[i]<='9')
{
if(s[i+1]-s[i]==1)
{
len++;
if(i==s.length()-2)
{
if(len >= maxlen)
{
maxlen = len+1;
maxindex = i-len+1;
}
break;
}
}
else
{
if(len >= maxlen)
{
maxlen = len+1;
maxindex = i-len;
}
len = 0;
}
}
}
printf("%d %d",maxindex,maxlen);
return 0;
}