C++ 面試題翻譯電話號碼實例代碼。本站提示廣大學習愛好者:(C++ 面試題翻譯電話號碼實例代碼)文章只能為提供參考,不一定能成為您想要的結果。以下是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);
}
感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!