电话号码翻译(华为上机试题8_31_3)
2014-09-09 19:56
537 查看
下面的代码借鉴了华为上机试题中所给出原代码的一点思路:
在贴代码前先看下这段不完善的代码:
..........
int i = 0;
char temp[100];
char ch;
while(ch != '\n')
{
scanf("%s%c",temp,&ch);
i++;
}
当从键盘输入one two three[' five按下回车键后,通过调试(黑体字为断点)可以发现
i = 0 ;temp = one,ch = ' '
i = 1 ;temp = two, ch = ' '
i = 2 ;temp = three[' , ch = ' '
i = 3 ;temp = five, ch = ' \n'
这样输入的目地就是为了顺利的取出空格作为分隔符所产生的字符串。
注意:scanf("%s%c",temp,&ch)与scanf("%s,%c",temp,&ch)的区别。
...........
/*
* Author :zhuang_569
* Time : 2014/9/9
* description : 翻译电话号码
* 题目:
* 将电话号码one two ...nine zero翻译成1 2 9 0
* 例如输入:one two three 输出:123
* 输入:one two double Two 输出:1222
* 输入:1 two 2 输出:ERROR
* 输入:double double two 输出:ERROR
*/
#include "iostream"
#include "string"
using namespace std;
typedef unsigned short int INT16U;
/**************函数声明*******************/
void handle(void);
/**************全局变量声明*******************/
const char code[11][7] = {"zero","one","two","three","four","five","six","seven","eight","nine","double"};
char temp[100];
char end_sign= ' ';
int main(void)
{
handle();
return 0;
}
void handle(void)
{
int i = 0;
int double_flag = 0;
//double符号的标志位
//当出现两个double当出错处理
int back_up_val = 255;
int index = 0;
//统计输入的待翻译的电话号码的数量
int decode[100];
//存放翻译后的电话号码
int num = 0;
//翻译后的电话号码数量
int match_flag = 0;
//输入的待翻译的电话号码是否正确标志位
cout<<"请输入待翻译的电话号码:";
while(end_sign!= '\n')
{
//输入一串字符用空分割可以得到被分割的字符
//输入一串字符one two three.temp可以分别等于one two three
scanf("%s%c",&temp,&end_sign);
index++;
for(i=0; i<11;i++)
{
if((strcmp(temp,code[i])==0))
{
match_flag = 1;
//输入匹配
if(i < 10)
{
if(double_flag == 1)
{
double_flag = 0;
decode[num++] = i;
decode[num++] = i;
}
else
{
decode[num++] = i;
}
}
else if(i == 10)
{
double_flag = 1;
if((index-back_up_val) == 1)
{
cout<<"ERROR";
return;
}
back_up_val = index;
}
break;
//匹配后就跳出循环,节约时间
}
}
if(match_flag == 1)
{
match_flag = 0;
}
else
{
cout<<"ERROR";
return;
}
}
if(double_flag == 1)
//输入最后带翻译的电话号码为double
{
cout<<"ERROR";
return;
}
cout<<"翻译后的电话号码是:";
//输出译码后的电话号码
for(i=0; i<num; i++)
{
cout<<decode[i];
}
cout<<endl;
}
测试结果:
在贴代码前先看下这段不完善的代码:
..........
int i = 0;
char temp[100];
char ch;
while(ch != '\n')
{
scanf("%s%c",temp,&ch);
i++;
}
当从键盘输入one two three[' five按下回车键后,通过调试(黑体字为断点)可以发现
i = 0 ;temp = one,ch = ' '
i = 1 ;temp = two, ch = ' '
i = 2 ;temp = three[' , ch = ' '
i = 3 ;temp = five, ch = ' \n'
这样输入的目地就是为了顺利的取出空格作为分隔符所产生的字符串。
注意:scanf("%s%c",temp,&ch)与scanf("%s,%c",temp,&ch)的区别。
...........
/*
* Author :zhuang_569
* Time : 2014/9/9
* description : 翻译电话号码
* 题目:
* 将电话号码one two ...nine zero翻译成1 2 9 0
* 例如输入:one two three 输出:123
* 输入:one two double Two 输出:1222
* 输入:1 two 2 输出:ERROR
* 输入:double double two 输出:ERROR
*/
#include "iostream"
#include "string"
using namespace std;
typedef unsigned short int INT16U;
/**************函数声明*******************/
void handle(void);
/**************全局变量声明*******************/
const char code[11][7] = {"zero","one","two","three","four","five","six","seven","eight","nine","double"};
char temp[100];
char end_sign= ' ';
int main(void)
{
handle();
return 0;
}
void handle(void)
{
int i = 0;
int double_flag = 0;
//double符号的标志位
//当出现两个double当出错处理
int back_up_val = 255;
int index = 0;
//统计输入的待翻译的电话号码的数量
int decode[100];
//存放翻译后的电话号码
int num = 0;
//翻译后的电话号码数量
int match_flag = 0;
//输入的待翻译的电话号码是否正确标志位
cout<<"请输入待翻译的电话号码:";
while(end_sign!= '\n')
{
//输入一串字符用空分割可以得到被分割的字符
//输入一串字符one two three.temp可以分别等于one two three
scanf("%s%c",&temp,&end_sign);
index++;
for(i=0; i<11;i++)
{
if((strcmp(temp,code[i])==0))
{
match_flag = 1;
//输入匹配
if(i < 10)
{
if(double_flag == 1)
{
double_flag = 0;
decode[num++] = i;
decode[num++] = i;
}
else
{
decode[num++] = i;
}
}
else if(i == 10)
{
double_flag = 1;
if((index-back_up_val) == 1)
{
cout<<"ERROR";
return;
}
back_up_val = index;
}
break;
//匹配后就跳出循环,节约时间
}
}
if(match_flag == 1)
{
match_flag = 0;
}
else
{
cout<<"ERROR";
return;
}
}
if(double_flag == 1)
//输入最后带翻译的电话号码为double
{
cout<<"ERROR";
return;
}
cout<<"翻译后的电话号码是:";
//输出译码后的电话号码
for(i=0; i<num; i++)
{
cout<<decode[i];
}
cout<<endl;
}
测试结果:
相关文章推荐
- 华为上机—电话号码翻译
- 【华为2014上机试题】设计一个定时器管理系统
- 华为2015校园招聘 上机试题
- 华为校招上机笔试试题(B卷)——java实现
- 2012华为上机试题汇总及参考程序
- 2014华为武汉上机试题规范
- 华为校园招聘上机试题Java实现(一)
- 2012华为校园招聘上机试题大全及答案(软件)
- 华为上机试题及面试
- 2014华为武汉上机试题一:手机电池余量
- 2013华为上机试题
- 华为上机试题之子字符串替换
- 2014华为上机试题
- 华为java上机试题
- 华为校园招聘上机试题Java实现(二)
- 【华为上机试题C++】老师想知道从某某同学当中,分数最高的是多少,现在请你编程模拟老师的询问。当然,老师有时候需要更新某位同学的成绩.
- 2014华为武汉上机试题二:姓名的夫妻相
- 2013华为上机试题
- 去掉最大值、最小值之后剩下的个数(华为上机试题8_29_1)
- 【华为上机试题C++】老师想知道从某某同学当中,分数最高的是多少,现在请你编程模拟老师的询问。当然,老师有时候需要更新某位同学的成绩.