这篇文章主要介绍了C++如何翻译电话号码,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。
C++ 面试题翻译电话号码实例代码
例如:
输入:OneTwoThree
输出:123
输入:OneTwoDoubleTwo
输出:1222
输入:1Two2
输出:ERROR
输入:DoubleDoubleTwo
输出:ERROR
有空格,非法字符,两个Double相连,Double位于最后一个单词 都错误。
#include <iostream>
#include <string>
using namespace std;
void process(string str)
{
//各字符串的下标即为其对应的阿拉伯数字
char *ch[]={"zero","one","two","three","four","five","six","seven","eight","nine","double"};
char *out[100];//存储结果集
int f=0;
int i,j,k;
string substr;
int len=str.length();
int flag=0;//判断double出现
int flag2=0;//判断内循环有无break
for(i=0;i<len;i++)
{
if(flag2)
break;
else if(str[i]<97 || str[i]>122)//非字母字符
{
out[f++]="error";
break;
}
else{
//可以看出拼音最短为3个字符,最长为6个字符
for(j=i+2;j<len&&(j-i)<6;j++)
{
substr=str.substr(i,j-i+1);
if(!substr.compare(ch[10]))//出现double
{
if(i==len-6)//最后一个double
{
out[f++]="error";
flag2=1;
break;
}else if(flag){//连续两个double
out[f++]="error";
flag2=1;
break;
}else
flag=1;
}
else{
for(k=0;k<10;k++)
{
if(!substr.compare(ch[k]))
{
if(flag){
out[f++]=ch[k];
out[f++]=ch[k];
flag=0;
break;
}
else{
out[f++]=ch[k];
break;
}
}
}
}
}
}
}
int flag3=0;//看有无error,默认没有error
for(int r=0;r<f;r++){
if(out[r]=="error")//有error
flag3=1;
}
if(!flag3)
for(r=0;r<f;r++)
for(k=0;k<10;k++)
{
if(out[r]==ch[k])
printf("%d",k);
}
else
printf("error");
printf("\n");
}
void main()
{
string str;
while(getline(cin,str))
process(str);
}
感谢你能够认真阅读完这篇文章,希望小编分享的“C++如何翻译电话号码”这篇文章对大家有帮助,同时也希望大家多多支持亿速云,关注亿速云行业资讯频道,更多相关知识等着你来学习!
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。