2015输入一个字符串以#结尾,则输出此字符串中连续出现最长的数字串及其开始的下标;

时间:2021-07-15 10:55:44

题目:
2015
1、 设计一个程序,输入一个字符串以#结尾,则输出此字符串中连续出现最长的数字串及其开始的下标;
例如:
输入:ab125ef1234567#
输出:
1234567   开始位置为:8

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int continueMax(char *inputStr);
int main()
{
char inputString[]="ab125ef1234567#";
continueMax(inputString);
return 0;
}
//虽然continueMax函数传入的是指向char的指针,但是可以传入数组的地址,这样就可以用inputStr[i]
int continueMax(char *inputStr)
{
int i=0,count = 0,maxCount = 0,maxStart = 0;
int len = strlen(inputStr);
//printf("%d\n",len);
while( i <len)
{
if (inputStr[i]>'0'&&inputStr[i] <'9')
{
count++;
}
else
{
if(count>maxCount)
{
maxCount = count;
maxStart = i-count;
count = 0;
}
}
i++;
}
//打印字符串中连续出现最长的数字串
for (i=maxStart; i<=(maxStart+maxCount)&&(inputStr[i]!='#');i++)
{
printf("%c",inputStr[i]);
}
/*打印开始的下标,由于题目给的例子是以1下标开始的,所以加1*/
printf("\n%d",maxStart+1);
return 0;
}

法二:

/* 法二,思路更加清晰,简单;
主要是gets()函数的应用
*/

#include<stdio.h>

int main()
{
char a[30]={0}; //输出一串字符的最大数字串,注意初始化#6
//i用来对整个字符串进行计数,j用来对数字字符串进行计数,n为找到了最大数字字符串之后做输出计数需要
int i=0,j=0,n=0,maxCount=0,maxStart=0;
printf("请输入字符串#结尾:");
gets(a);//注意这里是gets()函数,不是getc()函数#1
while(a[j]!='#')//对字符串进行遍历,这里要用j,不是用i,因为j比i走的快
{
while((a[j]>'9'||a[j]<'0')&&a[j]!='#') i++,j++;//如果i,j指向的不是数字则一直往后走,注意这里是或不是与#2
while((a[j]<='9'&&a[j]>='0')&&a[j]!='#') j++;//a[i]和a[j]之间夹住的是数字,注意这里有大于等于号,等于号不要漏#3
if(j-i>maxCount) //用maxCount来记录最长数字连续的个数,用maxStart来记录最大数字串的起始位置
{
maxStart=i;
maxCount=j-i;
}
i=j;//这一步很关键,易忘,易漏#4
}
//要考虑特殊情况,没有数字串的情况#5
if(maxCount ==0 ){
printf("没有最大数字串\n");
return 0;
}

printf("最大数字串为:");

while(n<maxCount)
{
printf("%c",a[maxStart+n]);
n++;
}
printf("开始位置为:%d\n",maxStart);
return 0;
}