//输入:一个含有数字的字符串;
//输出:字符串中连续最长的数字字符串。
//例如:输入:a12ab123park12345 输出:12345
法一:
#include <stdio.h>
void my_strcpy(char *num,char *p,int len) //字符串复制法一
{
while(len)
{
len--;
*num = *p;
num++;
p++;
}
}
/*
void my_strcpy(char *str,char *ptr) //字符串复制法二
{
while(*str)
{
*str = *ptr;
str++;
ptr++;
}
*ptr = '\0';
}
*/
void select(char *arr,char *num)
{
int count = 0;
int max = 0;
while(*arr != '\0')
{
while(*arr >= '0' && *arr <= '9') //当为连续字符时循环
{
arr++;
count++;
}
if(count > max)
{
max = count;
my_strcpy(num,arr - count,count);
}
count = 0;
arr++;
}
}
int main()
{
char arr[100] = {0};
char num[20] = {0};
printf("Please input a string:");
scanf("%s",arr);
select(arr,num);
printf("%s\n",num);
return 0;
}
法二:
#include <stdio.h>
#include <string.h>
/*
int counting(char a[10][10],int z)//计算某行数组的长度
{
i = z;
int j = 0;
int count = 0;
for(j = 0; a[i][j] != '0'; j++)
{
count++;
}
return count;
}
*/
void select(char *arr,char a[10][10])
{
int i = 0;
int j = 0;
int z = 0;
int max = 0;
int count = 0; //数组一行的元素个数
int max_line = 0; //行数
while(*arr != '\0')
{
while(*arr >= '0' && *arr <= '9')
{
a[i][j] = *arr;
j++;
arr++;
}
i++;
arr++;
}
for(z = 0; z <= i; z++) //选出最长的一行
{
// count = counting(a,z);
count = strlen(a[z]);
if(count > max)
{
max = count;
max_line = z;
}
}
/* for(j = 0;j < max;j++ )
{
printf("%c",a[max_line][j]);
}
*/ printf("%s\n",a[max_line]);
}
int main()
{
char arr[100] = {0};
char a[10][10] = {0};
printf("Please input a string:");
scanf("%s",arr);
select(arr,a);
return 0;
}