华为上机—电话号码翻译
2014-10-01 23:24
239 查看
这是华为的一道上机题,上网搜了一下大神写的,发现很乱,没看懂,于是自己写了个,编译已运行通过(vs2010)若有问题,还望留言!
/*将 电话号码 one two 。。。nine zero 翻译成1 2 。。9 0 中间会有double例如输入:OneTwoThree 输出:123输入:OneTwoDoubleTwo 输出:1222输入:1Two2 输出:ERROR输入:DoubleDoubleTwo 输出:ERROR有空格,非法字符,两个Double相连,Double位于最后一个单词都错误*/#include <stdio.h>#include <stdlib.h>#include <string.h>#define N 10000void translate_num(char *src, char (*index_num)[10]);int main (int argc, char **){char table_num[11][10] = {"zero", "one", "two", "three", "four","five", "six", "seven", "eight", "nine","double"};//char *src = "onethreesevenoneeightfivetwonineeightseventwo";char src= "\0";printf("input the phonon number:\n");scanf("%s", src);char (*p)[10];p = table_num;translate_num(src, p);system("pause");return 0;}void translate_num(char *src, char (*index_num)[10]){if (nullptr == src){printf("error!\n");return;}for (int i = 0; i < strlen(src); i ++){if (src[i] < 'A' ||(src[i] > 'Z' && src[i] < 'a') ||src[i] > 'z'){printf("error!\n");return;}}if (0 == strncmp(src+0, *(index_num+10), 6) ||0 == strncmp(src+strlen(src)-1-6, *(index_num+10), 6)){printf("error!\n");return;}int dst= {11};int dst_index = 0;for (int i = 0; i < strlen(src);){switch(src[i]){case 'Z':case 'z':if (0 == strncmp(src+i, *(index_num+0), 4)){dst[dst_index++] = 0;i += 4;}break;case 'O':case 'o':if (0 == strncmp(src+i, *(index_num+1), 3)){dst[dst_index++] = 1;i += 3;}break;case 'T':case 't':if (0 == strncmp(src+i, *(index_num+2), 3)){dst[dst_index++] = 2;i += 3;}else if (0 == strncmp(src+i, *(index_num+3), 5)){dst[dst_index++] = 3;i += 5;}break;case 'F':case 'f':if (0 == strncmp(src+i, *(index_num+4), 4)){dst[dst_index++] = 4;i += 4;}else if (0 == strncmp(src+i, *(index_num+5), 4)){dst[dst_index++] = 5;i += 4;}break;case 'S':case 's':if (0 == strncmp(src+i, *(index_num+6), 3)){dst[dst_index++] = 6;i += 3;}else if (0 == strncmp(src+i, *(index_num+7), 5)){dst[dst_index++] = 7;i += 5;}break;case 'E':case 'e':if (0 == strncmp(src+i, *(index_num+8), 5)){dst[dst_index++] = 8;i += 5;}break;case 'N':case 'n':if (0 == strncmp(src+i, *(index_num+9), 4)){dst[dst_index++] = 9;i += 4;}break;case 'D':case 'd':if (0 == strncmp(src+i, *(index_num+10), 6)){dst[dst_index++] = dst[dst_index-1];i += 6;}if (0 == strncmp(src+i, *(index_num+10), 6)){printf("error!\n");return;}break;}}printf("电话号码为:\n");for (int i = 0; i < dst_index; i ++){printf("%d", dst[i]);}printf("\n");}
相关文章推荐
- 电话号码翻译(华为上机试题8_31_3)
- 华为机试电话号码翻译C++实现
- 华为上机英文数字翻译
- 华为上机:IP地址转换
- 华为上机题汇总(一)
- 华为上机题汇总(三)
- 华为上机题汇总(十二)
- 华为2016校园招聘上机笔试题——成绩查询和更新
- 华为上机题
- 华为2013校园招聘上机笔试题
- 华为机试——翻译电话号码
- 再来两道华为字符串上机题目
- 【华为2015暑期实习生上机题】仿照Excel的列编号
- 华为2011上机笔试题3+参考程序
- 2014华为校园招聘第三轮上机题目(南京-C/C++)
- 华为上机练习题--姓名夫妻相
- 2013华为上机题C++编程
- 华为2013校园招聘上机笔试题
- 2014年华为上机题目
- 2013华为上机-装满篮子问题-回溯法