vjudge寒假刷题集A字符串分割排序

A - 字符串操作
 
输入一行数字,如果我们把这行数字中的‘5’都看成空格,那么就得到一行用空格分割的若干非负整数(可能有些整数以‘0’开头,这些头部的‘0’应该被忽略掉,除非这个整数就是由若干个‘0’组成的,这时这个整数就是0)。

你的任务是:对这些分割得到的整数,依从小到大的顺序排序输出。

Input输入包含多组测试用例,每组输入数据只有一行数字(数字之间没有空格),这行数字的长度不大于1000。  

输入数据保证:分割得到的非负整数不会大于100000000;输入数据不可能全由‘5’组成。
Output对于每个测试用例,输出分割得到的整数排序的结果,相邻的两个整数之间用一个空格分开,每组输出占一行。
Sample Input

0051231232050775

Sample Output

0 77 12312320

 

我的思路是先用strtok函数分割字符串
再用一个数组将分割结果保存
利用库函数进行排序
其中strtok函数的结构如下:
1 p = strtok(a,"5");
2    while(NULL != p)
3    {
4     p = strtok(NULL,"5");
5    }

 


源代码如下
 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 #include <string.h>
 4 #define N 1010
 5 int cmp(const void *a,const void *b){
 6     return *(int*)a-*(int*)b;
 7 }
 8 int main()
 9 {
10     char buf[N] = {0};
11     char s[2] = "5";
12     int str[N];
13     int i=0;
14     int j;
15     char *temp;
16     while (~scanf("%s",buf)){
17         temp = strtok(buf,s);
18         while (temp){
19             str[i++] = atoi(temp);
20             temp = strtok(NULL,s);
21         }
22         qsort(str,i,sizeof(int),cmp);
23         for (j=0;j<i;j++){
24             printf("%d ",str[j]);
25         }
26     }
27     return 0;
28 }

 



用到的测试用例为:
05123123205077555
0 77 12312320

00005051231232050775
0 0 77 12312320

50512312320555507750005
0 0 77 12312320

505123123205077
0 77 12312320

051231232055077
0 77 12312320

5550
0

1155663535006555
3 6 11 663

10000000055051120
0 1120 100000000

00060054
4 600

  

那么问题来了,为什么提交到OJ评测是WA呢?

后来我又查到了一个没有使用strtok函数的代码

提交后AC了,但是我还没有看懂......

代码如下

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 int cmp(const void *a,const void *b){
 4     return (*(int *)a)-(*(int *)b);
 5 }
 6 int main(){
 7     char s[1010];
 8     int a[1010],len,sum,i,f;
 9     while(~scanf("%s",s)){
10         sum=0,len=0;f=0;
11         for(i=0;s[i]!='\0';i++){
12             if(s[i]!='5'){sum=sum*10+s[i]-'0';f=1;}
13             else if(f==1){a[len++]=sum;sum=0;f=0;}
14             else sum=0;
15         }
16         if(f==1)a[len++]=sum;
17         qsort(a,len,sizeof(int),cmp);
18         printf("%d",a[0]);
19         for(i=1;i<len;i++)printf(" %d",a[i]);
20         printf("\n");
21     }
22     
23     return 0;
24     
25 }

 未完待续......

  

 






posted @ 2020-01-21 22:29  noobcoderMelody  阅读(187)  评论(0编辑  收藏  举报