题解 | #在字符串中找出连续最长的数字串#
在字符串中找出连续最长的数字串
http://www.nowcoder.com/practice/2c81f88ecd5a4cc395b5308a99afbbec
书签记录
用marker记录出现数字的位置,当检测到之后的字符不是数字后,计算长度;
用maxmarker[]记录最长数字序列出现的位置;如果之后出现更长的数字序列,则之前保存的序列自动舍弃(通过覆写实现)
输出按照maxmarker[]存储的位置和maxlen、maxcnt等标识进行
#include<stdio.h>
int IsNum(char c)
{
if(c<='9' && c >= '0')
return 1;
else
return 0;
}
int main()
{
char str[201] = {0};
char maxlen = 0;
unsigned char maxmarker[10] = {0};
unsigned char i,j;
unsigned char maxcnt = 0;
int marker = -1;
int tmp;
while(fgets(str,200,stdin)!=0)
{
maxcnt = 0;
marker = -1;
maxlen = 0;
for(i=0;str[i-1]!='\n';i++)
{
if(marker==-1)
{
if(IsNum(str[i]))
marker=i;
}
else
{
if(!IsNum(str[i]))
{
tmp = i-marker;
if(tmp>maxlen)
{
maxlen = tmp;
maxcnt = 1;
maxmarker[0] = i;
}
else if(tmp==maxlen)
{
maxmarker[maxcnt] = i;
maxcnt++;
}
marker = -1;
}
}
}
for(i=0;i<maxcnt;i++)
{
for(j=0;j<maxlen;j++)
{
printf("%c",str[maxmarker[i]-maxlen+j]);
}
}
printf(",%d\n",maxlen);
}
return 0;
}