主题:帮我看看这个程序。
所有旳编码模式中最有名的可能要数莫尔斯(Morse)编码le,它是塞廖尔. 莫尔斯在1832年为电报系统发明的。莫尔斯码给每个字母、数字以及特殊字符(如句号、逗号、冒号和分号)赋予─组点划线。在面向声音的系统中,点代表了短声音,划代表长声音。点和划还用在面向光的系统和信号旗系统中。 文字之间的间隔表示为一个空格,即既不填写点也不填写划。在面向声音的系统中空格表示一个短暂的停顿,其间啥声音也没有。莫尔斯码的国际版如下表所示。要求自己定义特殊字符(如句号、逗号、冒号和分号)的莫尔斯码。并编写一个程序,程序中包含 1.输入一段文字,并立即将其转换成莫尔斯码。 2.从文本文件中读入一篇文本,将其转换成莫尔斯码并保存到另一个文本文件中。 3.从一个莫尔斯码文件中读入莫尔斯码并将其还原为文本。 4.自己制定一套莫尔斯编码,并用其对文本文件进行编码和解码的操作。 5.退出系统 注意:在每个莫尔斯码的字母之间留一个空格,在每个用莫尔斯编码的单词之间留三个空格。 其它要求: 只能使用C/C++语言,源程序要有适当的注释,使程序容易阅读 至少采用文本菜单界面(假如能采用图形菜单界面更好) 学生可自动增加新功能模块(视情况可此外加分)
这个是别人写的,我测试无法通过,哪位高手帮我看看,如果能帮我修改下更加感激。我邮箱wjp16@126.com 唉。没办法。。老师叫我们做这个,好多东西都还没教过。。
#include <stdio.h>
#include <string.h>
#include <ctype.h>
char character[56] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,?\'!/()&:;=+-_\"$@";
char morsecode[56][10] = {".-","-...","-.-.","-..",".","..-.","--.",
"....","..",".---","-.-",".-..","--","-.",
"---",".--.","--.-",".-.","...","-",
"..-","...-",".--","-..-","-.--","--..",
"-----",".----","..---","...--","....-",".....","-....","--...","---..","----.",
".-.-.-","--..--","..--..",".----.","-.-.--","-..-.","-.--.","-.--.-",".-...",
"---...","-.-.-.","-...-",".-.-.","-....-","..--.-",".-..-.","...-..-",".--.-."};
/*******************************************************
* 从指定文件中读取一篇文章,用莫尔斯码对它编码,
* 并保存到另一个文件中
* 在每一个莫尔斯码编码的字母之间留一个空格,在每个用莫尔斯
* 码的单词之间留三个空格。
********/
int char2morse(char* file1,char* file2)
{
FILE *fp1, *fp2;
if((fp1=fopen(file1,"r"))==NULL)
{
printf("can not open file %s",file1);
return false;
}
if((fp2=fopen(file2,"w"))==NULL)
{
printf("can not open file %s",file2);
return false;
}
char ch, *temp;
ch = fgetc(fp1);
while(ch != EOF)/*判断文件结束*/
{
if( 97<=ch<=122)
ch = toupper(ch);
if(ch == ' ')
fputs(" ",fp2);
else{
int i =0;
while(ch != character[i] && i<56)
i++;
fputs(morsecode[i],fp2);
fputc(' ',fp2);
}
ch = fgetc(fp1);
}
fclose(fp1);
fclose(fp2);
}
/*morse码和数组中的码比较,返回morse码对应的字符*/
int cmpcode(char* str1,char* ch)
{
int j =0;
while(strcmp(str1,morsecode[j]) && j<56)
{
j++;
}
*ch = character[j]; /*ch是地址,*ch代表地址存储的数据*/
return 0;
}
/********************************************************
* 读取一个莫尔斯码表示的文章,然后把他转换为等价的英语,
* 并保存到另一文件中。
* ****************************************************/
int morse2char(char* file1,char* file2)
{
FILE *fp1, *fp2;
if((fp1=fopen(file1,"r")) == NULL)
{
printf("can not open file %s",file1);
return false;
}
if((fp2=fopen(file2,"w"))==NULL)
{
printf("can not open file %s",file2);
return false;
}
char ch,ch2,temp[10];
ch = fgetc(fp1);
int i=0,flag =0;/*flag=0 正常打印完字符后面加一个空格,flag=1,输出3个空格,flag=2 忽略又读入的空格 */
while(ch !=EOF)
{
if(ch != ' ')/*一般字符不是空格*/
{ flag=0;temp[i++] = ch; }
else
{
char t;
if(flag ==0 )
{
flag =1;
temp[i] = '\0';
cmpcode(temp,&t);
if(t>=65 && t<=96)
t = tolower(t);
fputc(t,fp2);
}
else if(flag ==1 )
{
fputc(' ',fp2);
flag =2;/*死状态,只打印一次空格,后面空格忽略*/
}
i=0;
}
ch = fgetc(fp1);
}
fclose(fp1);
fclose(fp2);
}
int main()
{
char2morse("1.txt","morsecode.txt");
morse2char("morsecode.txt","2.txt");
return 0;
}
这个是别人写的,我测试无法通过,哪位高手帮我看看,如果能帮我修改下更加感激。我邮箱wjp16@126.com 唉。没办法。。老师叫我们做这个,好多东西都还没教过。。
#include <stdio.h>
#include <string.h>
#include <ctype.h>
char character[56] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,?\'!/()&:;=+-_\"$@";
char morsecode[56][10] = {".-","-...","-.-.","-..",".","..-.","--.",
"....","..",".---","-.-",".-..","--","-.",
"---",".--.","--.-",".-.","...","-",
"..-","...-",".--","-..-","-.--","--..",
"-----",".----","..---","...--","....-",".....","-....","--...","---..","----.",
".-.-.-","--..--","..--..",".----.","-.-.--","-..-.","-.--.","-.--.-",".-...",
"---...","-.-.-.","-...-",".-.-.","-....-","..--.-",".-..-.","...-..-",".--.-."};
/*******************************************************
* 从指定文件中读取一篇文章,用莫尔斯码对它编码,
* 并保存到另一个文件中
* 在每一个莫尔斯码编码的字母之间留一个空格,在每个用莫尔斯
* 码的单词之间留三个空格。
********/
int char2morse(char* file1,char* file2)
{
FILE *fp1, *fp2;
if((fp1=fopen(file1,"r"))==NULL)
{
printf("can not open file %s",file1);
return false;
}
if((fp2=fopen(file2,"w"))==NULL)
{
printf("can not open file %s",file2);
return false;
}
char ch, *temp;
ch = fgetc(fp1);
while(ch != EOF)/*判断文件结束*/
{
if( 97<=ch<=122)
ch = toupper(ch);
if(ch == ' ')
fputs(" ",fp2);
else{
int i =0;
while(ch != character[i] && i<56)
i++;
fputs(morsecode[i],fp2);
fputc(' ',fp2);
}
ch = fgetc(fp1);
}
fclose(fp1);
fclose(fp2);
}
/*morse码和数组中的码比较,返回morse码对应的字符*/
int cmpcode(char* str1,char* ch)
{
int j =0;
while(strcmp(str1,morsecode[j]) && j<56)
{
j++;
}
*ch = character[j]; /*ch是地址,*ch代表地址存储的数据*/
return 0;
}
/********************************************************
* 读取一个莫尔斯码表示的文章,然后把他转换为等价的英语,
* 并保存到另一文件中。
* ****************************************************/
int morse2char(char* file1,char* file2)
{
FILE *fp1, *fp2;
if((fp1=fopen(file1,"r")) == NULL)
{
printf("can not open file %s",file1);
return false;
}
if((fp2=fopen(file2,"w"))==NULL)
{
printf("can not open file %s",file2);
return false;
}
char ch,ch2,temp[10];
ch = fgetc(fp1);
int i=0,flag =0;/*flag=0 正常打印完字符后面加一个空格,flag=1,输出3个空格,flag=2 忽略又读入的空格 */
while(ch !=EOF)
{
if(ch != ' ')/*一般字符不是空格*/
{ flag=0;temp[i++] = ch; }
else
{
char t;
if(flag ==0 )
{
flag =1;
temp[i] = '\0';
cmpcode(temp,&t);
if(t>=65 && t<=96)
t = tolower(t);
fputc(t,fp2);
}
else if(flag ==1 )
{
fputc(' ',fp2);
flag =2;/*死状态,只打印一次空格,后面空格忽略*/
}
i=0;
}
ch = fgetc(fp1);
}
fclose(fp1);
fclose(fp2);
}
int main()
{
char2morse("1.txt","morsecode.txt");
morse2char("morsecode.txt","2.txt");
return 0;
}