输入是一个只包含拼音的字符串,请输出对应的数字序列。

输入是一个只包含拼音的字符串,请输出对应的数字序列。转换关系如下:
描述:      拼音        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 ");
}

这里为什么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 循环终止
楼主将代码运行一下看看.
*/


#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;  
}  



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值