输入是一个只包含拼音的字符串,请输出对应的数字序列。转换关系如下:
描述: 拼音 yi er san si wu liu qi ba jiu
阿拉伯数字 1 2 3 4 5 6 7 8 9
输入字符只包含小写字母,所有字符都可以正好匹配
运行时间限制:无限制
内存限制: 无限制
输入: 一行字符串,长度小于1000
输出: 一行字符(数字)串
样例输入: yiersansi
这里为什么while(scanf("%d %d",&a,&b)!=EOF)跟while(scanf("%d %d",&a,&b)==2)作用是一样?都是ctrl+z后结束.. EOF应该是-1吧 为什么后着也能跟前者一样正常运行?
描述: 拼音 yi er san si wu liu qi ba jiu
阿拉伯数字 1 2 3 4 5 6 7 8 9
输入字符只包含小写字母,所有字符都可以正好匹配
运行时间限制:无限制
内存限制: 无限制
输入: 一行字符串,长度小于1000
输出: 一行字符(数字)串
样例输入: yiersansi
样例输出: 1234
#include<iostream>
using namespace std;
char *p[9]={"yi","er","san","si","wu","liu","qi","ba","jiu"};
char *q[9]={"1","2","3","4","5","6","7","8","9"};
int main()
{
char *r=(char *)malloc(sizeof(char)*1000);
cout<<"请输入一个只包含小写字母的字符串:"<<endl;
gets(r);
for(int i=0;i<1000;i++)
{
switch(r[i])
{
case 'y':cout<<q[0];break;
case 'e':cout<<q[1];break;
case 's':if(r[i+1]=='a') cout<<q[2];else cout<<q[3];break;
case 'w':cout<<q[4];break;
case 'l':cout<<q[5];break;
case 'q':cout<<q[6];break;
case 'b':cout<<q[7];break;
case 'j':cout<<q[8];break;
default:break;
}
}
system("pause");
return 0;
}
关于while(scanf("%d %d",&a,&b)!=EOF)
程序代码:
#include
"
stdio.h
"
#include " stdlib.h "
int main()
{
int a,b;
while(scanf( " %d %d ",&a,&b)!=EOF)
{
printf( " %d\n ",a+b);
}
return 0;
system( " pause ");
}
#include " stdlib.h "
int main()
{
int a,b;
while(scanf( " %d %d ",&a,&b)!=EOF)
{
printf( " %d\n ",a+b);
}
return 0;
system( " pause ");
}
这里为什么while(scanf("%d %d",&a,&b)!=EOF)跟while(scanf("%d %d",&a,&b)==2)作用是一样?都是ctrl+z后结束.. EOF应该是-1吧 为什么后着也能跟前者一样正常运行?
因为scanf函数有返回值
程序代码:
#include
<stdio.h>
int main()
{
int i,j;
printf( " %d\n ",scanf( " %d%d ",&i,&j));
return 0;
}
/*
scanf函数返回的是输入的数据的个数,什么都不输入代表-1
在scanf("%d %d",&a,&b)==2 中如果输入两个数字那么scanf函数会返回一个2
如果ctrl+Z 那么scanf函数返回-1
因为-1 != 2 所以循环终止
至于while(scanf("%d %d",&a,&b)!=EOF)为什么也有这个效果,原因是一样的
EOF = -1
输入两个数字 scanf返回结果2 输入ctrl+z 返回 -1
-1 == -1 循环终止
楼主将代码运行一下看看.
*/
int main()
{
int i,j;
printf( " %d\n ",scanf( " %d%d ",&i,&j));
return 0;
}
/*
scanf函数返回的是输入的数据的个数,什么都不输入代表-1
在scanf("%d %d",&a,&b)==2 中如果输入两个数字那么scanf函数会返回一个2
如果ctrl+Z 那么scanf函数返回-1
因为-1 != 2 所以循环终止
至于while(scanf("%d %d",&a,&b)!=EOF)为什么也有这个效果,原因是一样的
EOF = -1
输入两个数字 scanf返回结果2 输入ctrl+z 返回 -1
-1 == -1 循环终止
楼主将代码运行一下看看.
*/
#include<iostream>
#include<cstdio>
using namespace std;
void solve(char *str , int len)
{
int i;
for(i = 0 ; i < len ; )
{
switch(str[i])
{
case 'y':
putchar('1');
i += 2;
break;
case 'e':
putchar('2');
i += 2;
break;
case 's':
if(str[i + 1] == 'a')
{
putchar('3');
i += 3;
}
else
{
putchar('4');
i += 2;
}
break;
case 'w':
putchar('5');
i += 2;
break;
case 'l':
putchar('6');
i += 3;
break;
case 'q':
putchar('7');
i += 2;
break;
case 'b':
putchar('8');
i += 2;
break;
case 'j':
putchar('9');
i += 3;
break;
}
}
printf("\n");
}
int main(void)
{
int len;
char str[1000];
while(scanf("%s" , str) != EOF)
{
len = strlen(str);
solve(str , len);
}
return 0;
}