第一题
按要求分解字符串,输入两个数M,N;M代表输入的M串字符串,N代表输出的每串字符串的位数,不够补0。例如:输入2,8, “abc” ,“123456789”,则输出为“abc00000”,“12345678“,”90000000”
解题思路:先输入一串字符串,例如:asjfyberugbwegeac,接下来以8个字符作为分界点,变成了asjfyber ugbwegea c,然后将剩余的c补足为c0000000。
另一串字符也可依此类推。
/*按要求分解字符串,输入两个数M,N;M代表输入的M串字符串,N代表输出的每串字符串的位数,不够补0。
例如:输入2,8, “abc” ,“123456789”,则输出为“abc00000”,“12345678“,”90000000”*/
#include<stdio.h>
#include<string.h>
//将字符串根据各种情况进行输出
void put(char a[],int len,int n)
{
int i,j,k;
int b=len/n; //指的是分解的个数
int c=n*b; //分解后还剩下的字符
for(i=0;i<len;i++) //
{
if(i>=c) //当字符串到达末尾之后,不足n位的用0进行补充
{
k=i+n;
for(j=i;j<len;j++)
{
printf("%c",a[j]);
}
for(i=j;i<k;i++)
{
printf("0");
}
}
else //将字符串进行分段操作,每段之间用一个空格隔开
{
for(j=i;j<i+n;j++)
{
printf("%c",a[j]);
}
putchar(' ');
i=--j;
}
}
}
int main()
{
char a[100];int i,j,x,y;
printf("亲按要求输入两个数字\n");
scanf("%d %d",&x,&y);
printf("请输入字符串\n");
for(i=0;i<x;i++)
{
scanf("%s",a);
j=strlen(a);
put(a,j,y);
printf("\n");
}
return 0;
}
执行结果如下:
第二题:第一题:拼音转数字
输入是一个只包含拼音的字符串,请输出对应的数字序列。转换关系如下:
描述: 拼音 yi er san si wu liu qi ba jiu
阿拉伯数字 1 2 3 4 5 6 7 8 9
输入字符只包含小写字母,所有字符都可以正好匹配
运行时间限制:无限制
内存限制: 无限制
输入: 一行字符串,长度小于1000
输出: 一行字符(数字)串
样例输入: yiersansi
样例输出: 1234
解题思路:发现字符串中的规律:1–y;2–e;3–s;4–s;5–w;6–l;7–q;8–b;9–j;然后i,r,a,n,i,u,i,u,i,a,i,u等后缀字符与前面的字符没有冲突!!!
这样的话只需要碰到相应的字符,输出相应的数字即可,然后数字3或4拉开来分别表示即可。
相应代码如下
#include<stdio.h>
#include<string.h>
#include<math.h>
void put(char a[],int len) //当然也可以用switch方法来表示,更加一目了然
{
int i;
for(i=0;i<len;i++) //碰到的字符分九种情况进行表示
{
if(a[i]=='y')
{
putchar('1');
}
else if(a[i]=='e')
{
putchar('2');
}
else if(a[i]=='w')
{
putchar('5');
}
else if(a[i]=='l')
{
putchar('6');
}
else if(a[i]=='q')
{
putchar('7');
}
else if(a[i]=='b')
{
putchar('8');
}
else if(a[i]=='j')
{
putchar('9');
}
else if(a[i]=='s')
{
if(a[i+1]=='a') //如果’s‘字符后有'a',表明一定是3,反之是4
putchar('3');
else
putchar('4');
}
else
{
;
}
}
}
int main()
{
int len;char a[100];
printf("亲输入一串字符\n");
scanf("%s",a);
len=strlen(a);
put(a,len);
return 0;
}
代码执行结果
声明:原型题目来自 http://blog.csdn.net/hackbuteer1/article/details/39253767
但结合了笔者自己的思考方式,希望大家共同进步。