你的任务是:对这些分割得到的整数,依从小到大的顺序排序输出。
输入数据保证:分割得到的非负整数不会大于100000000;输入数据不可能全由‘5’组成。
0051231232050775
0 77 12312320-----------------------------------------菜鸟篇#include<stdio.h> #include<string.h> #include<stdlib.h> char buf[1010]; int a[1010]; int b[1000]; int cmp(const void *a ,const void *b) { return *(int*)a - *(int*)b; } int main() { int right(int len); int left(int len); int i,j,k,temp; int len,le,ri,t; memset(a,0,sizeof(a)); memset(b,0,sizeof(b)); memset(buf,0,sizeof(buf)); while(scanf("%s",buf)!=EOF) { len = strlen(buf); le = left(len); ri = right(len); //printf("le: %d ri: %d\n",le,ri); for(i=le;i<=ri;i++) temp = temp*10 + buf[i] - '0'; if(temp==0) { printf("0\n");continue;} k = 0;temp=0; for(i=le;i<=ri;i++) { for(j=i;buf[j]!='5'&&j<=ri;j++) { temp = temp*10 + buf[j]-'0'; } a[k++] = temp; temp = 0; for(t=j;t<=ri;t++) { if(buf[t]!='5') break; } i = t-1; } qsort(a,k,sizeof(a[0]),cmp); printf("%d",a[0]); for(i=1;i<k;i++) printf(" %d",a[i]); printf("\n");
memset(a,0,sizeof(a)); memset(b,0,sizeof(b)); memset(buf,0,sizeof(buf)); } return 0; } int left(int len) { int i,flag; for(i=0;i<len;i++) { if(buf[i]!='5') { flag=i;break; } } return flag; } int right(int len) { int i,flag; for(i=len-1;i>=0;i--) { if(buf[i]!='5') { flag=i;break; } } return flag; }
---------------------------------------高效篇其实可以用strtok()函数以及分割单词,从字符串中分离出来一部内容,都可以用这个函数;需要注意的是:此函数返回的是字符类型的指针,以及第二次调用时 第一个参数必须是NULL;#include<stdio.h> #include<string.h> #include<stdlib.h> #include<algorithm> using namespace std; int main() { char s[1500]; int a[1500]; while(scanf("%s",&s)!=EOF) { memset(a,0,sizeof(a)); int count=0; char *p; p=strtok(s,"5"); while(p!=NULL) { sscanf(p,"%d",&a[count++]); p=strtok(NULL,"5"); } sort(a,a+count); printf("%d",a[0]); for(int i=1;i<count;i++) printf(" %d",a[i]); printf("\n"); } return 0; }