zoukankan      html  css  js  c++  java
  • 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]!='';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("
    ");
    21     }
    22     
    23     return 0;
    24     
    25 }

     未完待续......

      






  • 相关阅读:
    2014找工作----扎实的基础和开阔的视野是企业最看重的因素
    2014找工作总结-机会往往留给有准备的人
    【STL源码剖析读书笔记】【第1章】STL概论与版本简介
    【c++ primer读书笔记】【第13章】拷贝控制
    【c++ primer读书笔记】【第12章】动态内存
    【c++ primer读书笔记】【第11章】关联容器
    【c++ primer读书笔记】【第10章】泛型算法
    【c++ primer读书笔记】【第9章】顺序容器
    WebSocket 是什么原理?为什么可以实现持久连接
    IDEA将项目导出war包方法(详细)
  • 原文地址:https://www.cnblogs.com/noobchen/p/12227232.html
Copyright © 2011-2022 走看看