题目描述
B分割
ProblemDescription
输入一行数字,如果我们把这行数字中的‘9’都看成空格,那么就得到一行分割的若干非负整数(可能有些整数以‘0’开头,这些头部的‘0’应该被忽略掉,除非这个整数就是由若干个‘0’组成的,这时这个整数就是0)。
Input
输入包含多组测试用例,每组输入数据只有一行数字(数字之间没有空格),这行数字的长度不大于100。
输入数据保证:分割得到的非负整数不会大于100000000;输入数据不可能全由‘9’组成。
Output
对于每个测试用例,输出分割得到的整数,相邻的两个整数之间用一个“,”分开,每组输出占一行。
SampleInput
92229219995599
SampleOutput
222,21,55
解法一:
#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[i]!='\0';i++)
{
if(src[i]=='9')
{
break;
}
des[i-start]=src[i];
}
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);
}
}
结果:
解法二:
#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[i]));
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--;
}
结果: