200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > *翻译电话号码

*翻译电话号码

时间:2022-02-07 04:24:39

相关推荐

*翻译电话号码

题目描述:

将电话号码 one two...nine zero翻译成1 2...9 0

中间会有double

例如输入:onetwothree

输出:123

输入:onetwodoubletwo

输出:1222

输入:1two2 输出:ERROR

输入:doubledoubletwo 输出:ERROR

有空格,非法字符,两个double相连,double位于最后一个单词,都错误,输出:ERROR

代码:

#include<stdio.h> #include<string.h> #include<stdlib.h> int main() { char a[100]="\0",out[100]="\0"; char temp[10]="\0"; gets(a); //对有非法字符打印错误 for(int i=0;a[i]!='\0';i++) { if(a[i]<'a'||a[i]>'z') { printf("ERROR\n"); return 0; } } char b[11][11]={"zero","one","two","three","four","five","six","seven","eight","nine","double"}; //将对应的电话号码变成字符存到out数组中,输入错误时打印错误 int i,k=0; for(i=0;a[i]!='\0';) { strncpy(temp,a+i,6); if(strncmp(temp,b[0],4)==0) { out[k++]='0'; i=i+4; continue; } else if(strncmp(temp,b[1],3)==0) { out[k++]='1'; i=i+3; continue; } else if(strncmp(temp,b[2],3)==0) { out[k++]='2'; i=i+3; continue; } else if(strncmp(temp,b[3],5)==0) { out[k++]='3'; i=i+5; continue; } else if(strncmp(temp,b[4],4)==0) { out[k++]='4'; i=i+4; continue; } else if(strncmp(temp,b[5],4)==0) { out[k++]='5'; i=i+4; continue; } else if(strncmp(temp,b[6],3)==0) { out[k++]='6'; i=i+3; continue; } else if(strncmp(temp,b[7],5)==0) { out[k++]='7'; i=i+5; continue; } else if(strncmp(temp,b[8],5)==0) { out[k++]='8'; i=i+5; continue; } else if(strncmp(temp,b[9],4)==0) { out[k++]='9'; i=i+4; continue; } else if(strncmp(temp,b[10],6)==0) { out[k++]='d'; i=i+6; continue; } else { printf("ERROR\n"); return 0; } } //排除连续d和最后d的情况 if(out[k-1]=='d') { printf("ERROR\n"); return 0; } for(i=0;i<k-1;i++) { if(out[i]=='d'&&out[i]==out[i+1]) { printf("ERROR\n"); return 0; } } //将d转换为d后面的数字符号 for(i=0;i<k-1;i++) { if(out[i]=='d') out[i]=out[i+1]; } printf("%s\n",out); return 0; }

或者

#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(!pare(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(!pare(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); }

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。