1. fgets处理单行输入
2. 分割字符串, 将数字字符串放到指针数组中
3. 处理字符串前缀zeros, stripping it
4. 字符串数字比较大小
5. 字符串selection sort
#include <stdio.h>
#include <string.h>
#define MAX_SIZE 5000
int cmpnumstr(char * str1, char * str2)
{
int len1 = 0;
int len2 = 0;
len1 = strlen(str1);
len2 = strlen(str2);
if(len1 > len2)
{
return 1;
}
else if(len1 < len2)
{
return -1;
}
else
{
return strncmp(str1, str2, len1) ;
}
}
void sort(char **array, int n)
{
char *temp = 0;
int i,j,k;
for(i=0;i<n-1;i++)
{
k=i;
for(j=i+1;j<n;j++)
{
if(cmpnumstr(array[k],array[j])<0)
k=j;
}
if(k!=i)
{
temp=array[i];
array[i]=array[k];
array[k]=temp;
}
}
}
int main()
{
char buf[MAX_SIZE];
int i = 0;
int j = 0;
int k = 0;
int zero = 0;
int pzero = 0;
int num = 0;
int il = 0;
char *p[MAX_SIZE];
fgets(buf,MAX_SIZE,stdin);
il = strlen(buf);
//buf[il-1]=0; //trailing \n
if(il >4097)
{
return 0;
}
for(i=0; i<il;i++)
{
if(buf[i]<'0' || buf[i]>'9')
{
buf[i] = 0;
}
}
if(buf[0] == '0' && buf[1] != 0)
{
buf[0] = 0;
}
for(i=0; i<il-1;i++)
{
if(buf[i] == 0)
{
if(buf[i+1] == '0' && buf[i+2] != 0)
{
buf[i+1] = 0;
}
}
}
j = 0; zero = 1;
for(i=0; i<il; i++)
{
if(buf[i] == 0)
{
zero = 1;
}
else
{
if(zero == 1)
{
//strip prefix zeros
p[j++] = buf+i;
zero = 0;
}
}
}
num = j;
sort(p, num);
for(k=0; k<num-1;k++)
{
printf("%s ", p[k]);
}
printf("%s\n", p[k]);
return 0;
}