重启c语言-求该字符串中最长连续数字序列出现的起始位置及其长度

PTA刷题第十五题

输入一个字符串,求该字符串中最长连续数字序列出现的起始位置及其长度。

输入格式:
输入一个字符串,可包含空格。

输出格式:
输出内容:最长数字序列起始位置和长度空格隔开。输出尾部不能有空格。输入空串,输出"NULL"

输入样例:

123ab12345a

输出样例:

5 5

思路:首先判断输入字符串是否为空,如果是空字符串,直接输出NULL,如果不是,则对字符串中每一个元素进行遍历,定义两个个变量,当循环开始时,一个元素用于记录位置,另一个元素用于记录连续数字的长度,之后每遇到一个新的连续数字序列,就与之前记录的连续数字序列长度进行比较,如果长度大于之前的连续数字序列,则进行更新。
代码如下:

#include<stdio.h>
#include<string.h>
int main()
{
    char a[300]={0}; 
    int i=0,j=0,n=0,maxCount=0,maxStart=0;
    gets(a);
    if(strcmp(a, "\0")==0)
    {
        printf("NULL\n");
        return 0;
	}	
    while(a[j]!='\0')
    {
        while(a[j]>'9'||a[j]<'0') i++,j++;
        while(a[j]<='9'&&a[j]>='0') j++;//a[i]和a[j]之间夹住的是数字
        if(j-i>maxCount)  //用maxCount来记录最长数字连续的个数,用maxStart来记录最大数字串的起始位置
        {
            maxStart=i;
            maxCount=j-i;
        }
        i=j;
    }
    printf("%d %d\n",maxStart,maxCount);
    return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_43723423/article/details/104830517