首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

电话号码变单词解决思路

2012-05-10 
电话号码变单词实现一个电话号码单词生成器。有些人觉得电话不容易记,所以为2-9中的每个数字依次分配了三个

电话号码变单词
实现一个电话号码单词生成器。有些人觉得电话不容易记,所以为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;

热点排行