列表

详情


OR59. 字符串中找出连续最长的数字串

描述

读入一个字符串str,输出字符串str中的连续最长的数字串

输入描述

个测试输入包含1个测试用例,一个字符串str,长度不超过255。

输出描述

在一行内输出str中里连续最长的数字串。

示例1

输入:

abcd12345ed125ss123456789

输出:

123456789

原站题解

C 解法, 执行用时: 1ms, 内存消耗: 228KB, 提交时间: 2018-10-09

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc,char *argv[])
{
//思路:判断当前位置是数字还是非数字,如果是数字,再判断当前位置的前一位是数字还是非数字,如果是非数字,则将当前位置存入beg并开始计算长度len。最后判断哪个位置的数字的长度最大
//str:输入的字符串
//beg:数字串的其实位置 len:数字串的长度
//maxbeg:最长的数字串的起始位置 maxlen:最长数字串的长度
char *str;
str=(char *)malloc(256);
int cout=scanf("%s",str);
int i,beg=500,len=0;
int maxbeg=0,maxlen=0;
for(i=0;i<strlen(str);i++)
{
if((*(str+i)>='0')&&(*(str+i)<='9'))
{
if(i==0)
{
beg=i;len=1;
}else{
if((*(str+i-1)<'0')||(*(str+i-1)>'9'))
{
if(maxlen<len)
{
maxlen=len;
maxbeg=beg;
}
beg=i;
len=1;
}else{
len++;
}
}
}
}
if(maxlen<len)
{
maxlen=len;maxbeg=beg;
}
int j=0;
while(j<maxlen){
printf("%c",*(str+maxbeg+j));
j++;
}

return 0;
}

Object C 解法, 执行用时: 1ms, 内存消耗: 256KB, 提交时间: 2017-12-04

#include <stdio.h>
#include <string.h>

#define SOURCESTRLEN  255
#define NUL   '\0'

int strncpyByStart(char *dest , const char *sour , const int start , const int counts);

int main(int argc , char *argv[])
{
	char sourceStr[SOURCESTRLEN];
	fgets(sourceStr,SOURCESTRLEN,stdin);  

	int len = strlen(sourceStr); 
	int counts = 0;
	int start = 0;
	char str[len];
	int i;
	for(i = 0;i < len-2;i++)
	{
		if((sourceStr[i+1] - sourceStr[i] )== 1)
		{
			counts++;
		}
		else
		{
			if((strlen(str)) < counts+1)
			{
				strncpyByStart(str,sourceStr,start,counts+1);
				start = i+1;
				counts = 0;
			}
			else
			{
				start = i+1;
				counts = 0;
			}
		}
	}


	if((strlen(str)) < counts+1)
	{
		strncpyByStart(str,sourceStr,start,counts+1);
	}


	fputs(str,stdout);
	return 0;

}

int  strncpyByStart(char *dest , const char *sour , const int start , const int counts)
{
	int i;
	for(i = 0; i<counts ;i++)
	{
		dest[i] = sour[i+start];
	}
	dest[i] = NUL;
	return  i;
}

上一题