PTA 7-4 4104 Soundex编码

Soundex编码是根据单词的拼写和发音相似性来对单词进行分组,例如,“can”与“khawn”, “con”与“gone”在Soundex编码下是相同的。
Soundex编码方法将每个单词转换成一串数字,每个数字代表一个字母。具体如下:
1 表示B、F、P或V;
2 表示C、G、J、K、Q、S、X或Z;
3 表示D或T;
4 表示L;
5 表示M或N;
6 表示R。
字母A,E,I,0,U,H,W和Y在Soundex中不用编码的,可以直接忽略。相邻的并且具有相同编码值的字母只用一个对应的数字表示。具有相同Soundex编码值的单词被认为是相同的单词。

输入格式:

输入文件中的每行为一个单词,全部大写,不超过20个字母。

输出格式:

对输入文件中的每个单词,输出该单词的Soundex编码,占一行。

输入样例:

KHAWN
PFISTER
BOBBY

输出样例:

25
1236
11

解题代码:

#include <stdio.h>
#include <string.h>
int main()
{
	int i,b[21];
	char a[21];
	while(scanf("%s",a)!=EOF)
	{
		a[20]={0};
		b[20]={0};
		for(i=0;a[i]!='\0';i++)
		{
			if((a[i]=='B')+(a[i]=='F')+(a[i]=='P')+(a[i]=='V')==1)
				b[i]=1;
			else if((a[i]=='C')+(a[i]=='G')+(a[i]=='J')+(a[i]=='K')+(a[i]=='Q')+(a[i]=='S')+(a[i]=='X')+(a[i]=='Z')==1)
				b[i]=2;
			else if((a[i]=='D')+(a[i]=='T')==1)
				b[i]=3;
			else if(a[i]=='L')
				b[i]=4;
			else if((a[i]=='M')+(a[i]=='N')==1)
				b[i]=5;
			else if(a[i]=='R')
				b[i]=6;
			else
				b[i]=0;
		}
		if(b[0]!=0)
			printf("%d",b[0]);
		for(i=1;i<strlen(a);i++)
			if(b[i]!=0&&b[i]!=b[i-1])
				printf("%d",b[i]);
		printf("\n");
	}
	return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_63249578/article/details/128733994
7-4