关于soundex code的C编程习题 紧急!!!!!

来源:百度知道 编辑:UC知道 时间:2024/06/17 12:39:32
要求用标准C语言写,题目如下:

每个SOUNDEX code由一个字母和三个数字组成.例如 Bender 就是 B536. 字母是每个名字的首字母,不作改变.
三个数字就按下表选择,注意忽略A, E, I, O, U, H, W, Y. 如果首字母之后不足三个数字则用0补足3位,例如: Lee 就是 L000, Cook 就是 C200. 超出三位以后的数字则忽略.

1: B, P, F, V
2: C, S, K, G, J, Q, X, Z
3: D, T
4: L
5: M, N
6: R
忽略:A, E, I, O, U, H, W, Y,(如果是首字母则不作更改)

另外, 如果名字中含有连续2个相同的字母, 则只处理其中一个.
例如:

名字 需要转换的字母 Code
Allricht A, l, r, c A462
Hanselmann H, n, s, l H524
Henzelmann H, n, z, l H524

注意, 无论输入大写还是小写字母, soundex code中的首字母一定要输出成大写, 而且后面的三位数字应该是不变的. (是否先把输入的字母都转成大写来处理会比较方便?) 而输入的名字由scanf命令输入!.

题目最后的一些建议:
程序最好由4部分组成,包括:
一个function用于输入名字和去除连续2个相同的字母.
一个function忽略除首字母外所有的A,E,I,O,U,H,W,Y.
一个function将除了首字母以外的字母转成数字.
一个main program用来给使用者输入名字(scanf),然后调用上面的function,最后输出答案.

附加: (做出的追加80分)

在原程序的基础上修改, 令程序可以处理一些由几部分组成的名字. 像: "Bred Groningen" 或

你提的建议说:“一个function用于输入名字”,又说“一个main program用来给使用者输入名字”,到底是在哪输啊,我代码是在main中输的。

#include <string.h>
#include <stdio.h>
#include <ctype.h>

void del(char *name){
int i, len = strlen(name);
for(i = 2; i < len; i++){
if(name[i]==name[i-1]){
strcpy(name+i-1, name+i);
i--;len--;
}
}
}
void ignore(char *name){
int i, len = strlen(name);
for(i = 1; i < len; i++){
switch(name[i]){
case 'A':case 'E':case 'I':case 'O':case 'U':case 'H':case 'W':case 'Y':
strcpy(name+i, name+i+1);
i--;
}
}
}
void change(char *name){
int i, len = strlen(name);
for(i = 1; i < len && i < 4; i++){
switch(name[i]){
case 'B':case 'P':case 'F':case 'V':
name[i]='1';
break;
case 'C':case 'S&