已知一个包含若干英文单词的词典(1≤n≤100),对任意输入的某一个单词word,进行如下查询操作:(字典中的单词和给定单词长度上限为255);(1)word在词典中的位置;(2)词典中仅有一个字符与word不匹配的单词序号;(3)词典中,比word多(或少)一个字符(除此字符外其余字符均匹配)的单词位置。(4)上述查找时,如有多个单词符合条件,仅输出其第一个单词的位置即可。【功能要求】(1)词典以TXT文件格式存放,每行一个单词。(2)查找后,输出找到的单词在词典中的位置,以及该单词。如未找到相关单词,应给出提示信息。
你题目的解答代码如下:
#include <stdio.h>
#include <string.h>
int main()
{
FILE * fp = fopen ("dict.txt", "r");
int i,j,n=0,m=-1,t=0,k;
char dic[1000][256], s[256];
while (fscanf(fp,"%s",dic[n])>0 )
n++;
printf("输入的某一个单词:");
scanf("%s", s);
int l = strlen(s);
for (i = 0; i < n; i++)
{
if (strcmp(s,dic[i])==0)
{
m = i;
break;
}
}
if (m!=-1)
printf("%s在词典中的位置是%d\n",s,m+1);
else
printf("%s在词典中没有找到\n",s);
m = -1;
for (i = 0; i < n; i++)
{
if (strlen(dic[i])!=l)
continue;
t = 0;
for (j = 0; j < l; j++)
{
if (dic[i][j]==s[j])
t++;
}
if (l-t==1)
{
m = i;
break;
}
}
if (m!=-1)
printf("词典中仅有一个字符与%s不匹配的单词是%s,序号%d\n",s,dic[m],m+1);
else
printf("没有找到词典中仅有一个字符与%s不匹配的单词\n",s);
m = -1;
for (i = 0; i < n; i++)
{
int f = strlen(dic[i])-l;
if (f!=1 && f!=-1)
continue;
k = 0;
for (j = 0; j < l; j++)
{
if (dic[i][j+k]!=s[j])
{
if (k==0)
k = f;
else
break;
}
}
if (j==l)
{
m = i;
break;
}
}
if (m!=-1)
printf("比%s多(或少)一个字符的单词是%s,序号%d\n",s,dic[m],m+1);
else
printf("没有找到比%s多(或少)一个字符的单词\n",s);
return 0;
}
如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!
用strcmp进行字符串比较,为0则相等