您的位置:首页 > 其它

英译汉程序,第一次帮网友改程序的作品。

2010-06-20 02:01 260 查看
/*
简单的英译汉程序设计

内容:
(1)构建简单的英汉对照词库,词数在200个以下;
(2)编程实现输入一个英文句子,通过单词分离及查找,

翻译成相应的汉语,为方便起见,可采取直译的方法,
如:There are 50 students in our class.
可译为:“有50学生在我们班”。对于查不到的单词,
在对应位置原样显示。
注:使用二维数组,不使用指针
//我没用二维数组。二维数组能不用就不用。太容易出错。

设计:

1,输入
1.1 提示
1.2 存储
2,处理
2.1 分词 得到有几个单词。
3,输出
3.1 非字母原样输出,
3.2 是字母,则先得到以这个字母开头的单词,//这个过程稍微复杂些。
然后则调用 查字典函数 处理
3.2.1 字典中的单词用汉语输出,
3.2.2 非字典中的单词原样输出。

说明:3中用到了2中的算法。或者说2可以融合进到3中。
为了逻辑上清晰,才把二者分开的。
时间:2010年6月20日凌晨50分完成。
出处:一个叫 咫尺天涯 的网友发的题目。
*/
/////////////////////////////////////////////////////////////////
#include<stdio.h>
#include<string.h>
#include<iostream.h>
struct Dict
{
char word[20];
char hanzi[30];
};
//定义了一个简单的字典,只有三个单词。喜欢的话随便加。
Dict dict[3]={{"I","我"},{"love","爱"},{"China","中国"}};

//存储用户输入的数据
char sent[80];
//记录单词数目
int s=0;
/////////////////////////////////////////////////////////////
//1输入函数
void input()
{
puts("请输入你要翻译的英语句子:/n");
gets(sent);
//puts(sent);//原样输出你输入的内容。调试用的。
}
/////////////////////////////////////////////////////////////
//2处理函数
void process()
{
//得到字符的个数
//一个单词的唯一标准是:开头是字母,中间全是字母,最后一个字母的后面不是字母。
bool pan(char);//本函数用于判断一个字符是否是字母,是返回真,不是返回假
int i;
for(i=0;sent[i]!='/0';i++)
{
//不是字母则直接略过。
if( !pan(sent[i]) )
continue;
//是字母且下一个不是字母,则单词数目增加
if( pan(sent[i]) && !pan(sent[i+1]) )
s++;
//隐含了一个字母后面还是字母则继续执行循环的事实。
}
printf("该句中共有%d个单词。/n",s);
}
//本函数用于判断一个字符是否是字母,是返回真,不是返回假
//3中也要用到这个函数。
bool pan(char c)
{
if(c>='a'&&c<='z' || c>='A'&&c<='Z')
return true;
else
return false;
}
/////////////////////////////////////////////////////////////
//3输出函数
void output()
{
void cunchu(char);//用于得到字符串中的单词
void chazidian();//用于查字典并根据情况输出
int i;
for(i=0;sent[i];i++)
{
if( !pan(sent[i]) )//不是字母则直接输出,并且开始下一个字符判断
cout<<sent[i];
else if( pan(sent[i]) && pan(sent[i+1]) )
cunchu(sent[i]);//是字母且下一个还是是字母,那就把这个字母存储起来
else//当这个字母是单词的最后一个字母时
{
cunchu(sent[i]);//先把最后一个字母存上。
cunchu('/0');//为字符串封尾,表明存储完了这个单词
chazidian();//判断这个单词是否在字典里。
}
}
}
//临时存储一个单词
char temp[20];
int index=0;//这是临时存储空间的位置指示变量
//每次查完字典后,用index变量实现对temp[]空间的清空。
//临时存储单词的函数
void cunchu(char c)
{
temp[index]=c;
index++;
}
//查字典函数////////////////////////
void chazidian()
{
int size(char[]);//得到字符数组的大小
int i;
int j;//用于遍历字典所有的单词
for(j=0;j<3;j++)
{
if( size(temp)==size(dict[j].word) )//单词字母数字一样才有可能一样
for(i=0;temp[i]!='/0';i++)//比较循环,逐个字母比较。
{//首字母不一样时,这个循环根本不执行。
if(temp[i]==dict[j].word[i] )//首字母相同,
continue;//接着比较下一个字母
else//遇到不一样的字母时,
break;//直接退出比较循环,显然没比较完,自
} //然temp[i]这时还是字母,不是'/0'
if('/0'==temp[i])//表示在字典查到了这个单词。
{
cout<<dict[j].hanzi;//输出翻译后的汉字
index=0;//一旦查完字典后,就应该把临时存储空间清空,下次还要用呢。
return;//退出查字典的过程。
}

}
//在字典中查不到时,
cout<<temp;//单词原样输出
index=0;//一旦查完字典后,就应该把临时存储空间清空。
}
//得到字符数组中单词的字母数目的函数
int size(char t[])
{
int i=0;
if(t[i]!='/0')
i++;
return i;
}
//////////////////////////////////////////////////////////////////////////////////
//这是我的。
//main函数就是老板!
//老板,只下命令,不干活。
void main()
{
input();
process();
output();

cout<<endl;
}

/////////////////////////////////////////////////////////////////////////////////
//这是你的程序
/*
struct trans
{
char words[20];
char tra[30];
char store[20];
};
struct trans yyh[100]={{"I","我"},{"love","爱"},{"china","中国"}};
void main()
{
char sent[80];
int i,j=0;
int s=0;//记录单词数目

puts("请输入你要翻译的英语句子:/n");
gets(sent);

////////////////////////////////////////////////////////
//记录单词个数。
for(i=0;sent[i];i++)
{
//仅仅以空格来作为单词的间隔是不行的!
//应该以字母
if(sent[i]==' '&&sent[i+1]!=' ' )
s++;
}

if(s>0 && sent[0]!=' ') s++;

printf("该句中共有%d个单词。/n",s);
////////////////////////////////////////////////////////

for(i=0;sent[i];i++)
{
//没考虑到 问好,分号,冒号,
if(sent[i]!=' '||sent[i]!=','||sent[i]!='!'||sent[i]!='.')
yyh[j].store[i]=sent[i];

else continue;
}

for(i=0;i<s;i++)
printf("%s/n",yyh[i].store);

printf("%d/n",j);
}
*/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐