电话号码变单词
实现一个电话号码单词生成器。有些人觉得电话不容易记,所以为2-9中的每个数字依次分配了三个字母,把电话号码转换成一个7个字符的英文单词。数字与字母的对应关系见下图1。举个例子,号码6862377就可以转换为单词NUMBERS。一个号码可以对应很多7个字符的组合,但大部分都不是单词。这个程序的功能是用户输入一个号码后,尽量找出可能的英文单词。并将结果写入文件。对应如下
2"abc",
3"def",
4"ghi",
5"jkl",
6"mno",
7"prs",
8"tuv",
9"wxy"
这个是我写的代码,但是就是跑不起来
#include <stdio.h>
#include<stdlib.h>
#include<string.h>
char c[10][10]= { "", "", "abc", "def", "ghi", "jkl", "mno", "prs", "tuv", "wxy" };
int total[10] = {0,0,3,3,3,3,3,3,3,3};
int number[7];
int answer[7] = {0};
void recursive(int * number, int * answer, int index, int n,FILE *fp)
{
int i;
if(index == n)
{
for(i=0;i<n;i++)
{
printf("%c", c[number[i]][answer[i]]);
fprintf(fp,"%c",c[number[i]][answer[i]]);
}
printf("\n");
fprintf(fp,"\n");
return;
}
for(answer[index]=0;answer[index]<total[number[index]];answer[index]++)
{
recursive(number, answer, index+1, n,fp);
}
}
int main(int argc, char* argv[])
{
int i;
char s[7];
char fs[1024],vs[1024],*ns=NULL;
FILE *fp,*vp,*np;
scanf("%s",s);
for(i=0;i<7;i++) number[i]=s[i]-'0';
fp=fopen("G:\\test.txt","w+");
vp=fopen("G:\\7个字母的英文单词.txt","r");
np=fopen("G:\\new.txt","w");
fprintf(np,s);
if(!fp&&!vp)
{
printf("cannot open the file\n");
exit(1);
}
recursive(number, answer, 0, 7,fp);
while((fgets(fs,256,fp))!=NULL)
{
ns=strstr(fs,vs);
while(ns==NULL&&feof(vp))
{
if(ns!=NULL) { fprintf(np,ns); printf("find the word\n"); }
}
}
fclose(fp);
fclose(vp);
fclose(np);
return 0;
}
我的想法很简单,就是一个文件来进行存储所有的7个字母的排列,然后更一个文件是已经存储好的所有的7个字母的单词,两个文件进行比较,如果两个文件中有相同的字符串,把这个字符串存贮到new这个文件中
[解决办法]
注意fgets得到的字符串要去掉最后的'\n'
fs[strlen(fs)-1]=0;