问答题 [说明] 下面的词典类Dic实现了简单的英译汉功能。程序运行后的输出为“我是一个学生”。 [C++程序] #include <iostream.h> #include <string.h> #define Max 100 class Dic { int top; char words[Max] [12]; char mean[Max] [20]; public: Die(){top=0;} void add(char w[],char m[]){ strcpy(words[top],w); strcpy(mean[top],m); {{U}}(1) {{/U}}; } void trans(char str[]) { int i=0,j=0,k=0,s; char w[12],h[200]; while(l) { if(str[i]! =''&&str[i]! ='/0') w[j++]=str[i]; //读取单词的一个字符,记录在w中 else { w[j]='/0'; for(s=0;s < top;s++) if(strcmp(words[s],w) {{U}}(2) {{/U}} 0) break; if(s<top) //找到了,翻译成对应的mean[s] { strcpy(w,mean[s]); j={{U}} (3) {{/U}};} else //未找到,翻译成(unknown) { strcpy(w,"(unknown)"}; j=9; } for(s=0;s<j;s++) h[k++]=w[s]; if(str[i]=='/0') {{{U}} (4) {{/U}}; break;} j=0; } i++; } cout<<h<<endl; } }; void main() { Dic obj; obj.add("I","我"); obj.add("am","是"); obj.add("student","学生"); obj.add("a","一个"); obj.trans("{{U}} (5) {{/U}}"); }
【正确答案】
【答案解析】(1) top++ (2) = = (3) strlen(w) (4) h[k]='/0' (5) I am a student [考点分析] 考查C++语言程序设计,主要是类的使用。 [解析] 词典类Dic包括top(当前单词指针),words(英语单词库)mean(对应中文单词库)数据成员,以及一个构造函数、add()(添加单词)和trans(英汉翻译)成员函数。trans函数通过检索单词的方式将一段英语翻译成对应的汉语,其算法是:循环读取输入的英文串str,每遇到空格或者到达末尾时提取一个单词w;然后在词典中搜索w,若找到了,将w替换成对应的中文单词,否则用“(unkown)”替代;将w追加到结果串h末尾,若到达str末尾时退出循环并输出h。 (1)词典中添加一个单词,top应增1; (2)此处for循环用于在词典英文单词中查找w,一旦匹配即刻退出该循环; (3)下文需要将w追加到h末尾,因此需要获取w的长度并存放于j中; (4)如果达到输入字符串的末尾,则翻译过程结束,应给结果串h添加结束符号; (5)由程序输出易知。