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; }