打印

【转】科协招新题目B:分割

[复制链接]
455|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
联通移不动|  楼主 | 2016-12-22 13:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
题目描述

B分割

ProblemDescription

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

Input

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

输入数据保证:分割得到的非负整数不会大于100000000;输入数据不可能全由‘9’组成。

Output

对于每个测试用例,输出分割得到的整数,相邻的两个整数之间用一个“,”分开,每组输出占一行。

SampleInput

92229219995599

SampleOutput

222,21,55



解法一:


[cpp] view plain copy
print?


  • #include "stdio.h"  
  • #include "string.h"  
  • int substr(char*des,char* src,int start);  
  • void print(char* des);  
  • void main()  
  • {  
  •     //start 截取字符串的起点下标 count截取的字符串长度  
  •     int start,count;  
  •     //length:输入的字符串长度,p_count为了输出“,”  
  •     int length,p_count=0;  
  •     char src[100],des[100];  
  •     //EOF是宏定义表示-1  
  •     //一般用这种写法输入多组数据  
  •     while(scanf("%s",src)!=EOF)  
  •     {  
  •         start=p_count=0;  
  •         length=strlen(src);  
  •         while(start<length)  
  •         {  
  •             count=substr(src,des,start);  
  •             if(count!=0)  
  •             {  
  •                 if(p_count!=0)  
  •                     printf(",");  
  •                 print(des);//这里是通过格式化字符串输出,  
  •                             //其实题意应该是把字符串转化为数字再输出,可以试试  
  •                 p_count++;  
  •             }  
  •             start+=count+1;  
  •         }  
  •         printf("\n");  
  •     }  
  • }  
  • //截取字符串  
  • int substr(char* src,char* des,int start)  
  • {  
  •     int i;  
  •     for(i=start;src!='\0';i++)  
  •     {  
  •         if(src=='9')  
  •         {  
  •             break;  
  •         }  
  •         des[i-start]=src;  
  •     }  
  •     des[i-start]='\0';  
  •     return i-start;   
  • }  
  • //格式化输出  
  • void print(char* des)  
  • {  
  •     //如果第一个字符为零,一直自增到不为零为止  
  •     while(*des=='0')  
  •         des++;  
  •     if(*des=='\0')//如果全是0,输出零  
  •     {  
  •         printf("0");  
  •     }else  
  •     {  
  •         printf("%s",des);  
  •     }  
  • }  

结果:



解法二:


[cpp] view plain copy
print?


  • #include "stdio.h"  
  • #include "string.h"  
  • #include "stdlib.h"  
  • void Split(const char* str, char* delims) ;  
  • char* pStr[50];   
  • int length = 0;   
  • void main()  
  • {  
  •     int i;  
  •     char strSrc[100];  
  •     while(scanf("%s",strSrc)!=EOF)  
  •     {  
  •         Split(strSrc,"9");  
  •         for(i=0;i<length;i++)  
  •         {  
  •             printf("%d",atoi(pStr));  
  •             if(i!=length-1)  
  •                 printf(",");  
  •         }  
  •             printf("\n");  
  •     }  
  • }  
  •   
  • //////////自定义Split()函数//////////////   
  • //////////参数://///////////////////////   
  • //////////1:要分割的字符串///////////////   
  • //////////2:分隔符///////////////////////   
  • //////////功能:实现分割字符串//////////   
  • void Split(const char* str, char* delims)   
  • {   
  •     char *p;   
  •     char*buffer;   
  •     length = 0;   
  •     buffer = strdup(str);   
  •     p = strtok(buffer, delims);   
  •     pStr[length++] = p;   
  •     while (p != NULL) {   
  •         p = strtok(NULL, delims);   
  •         pStr[length++] = p;   
  •     }   
  •     length--;   
  • }   

结果:


相关帖子

沙发
baimiaocun2015| | 2016-12-22 23:00 | 只看该作者
substr(src,des,start),,这个函数的很关键

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

67

主题

127

帖子

0

粉丝