c语言数字翻译成英文
㈠ c语言数字翻译成英文
我刚刚写了一个,你看看可满足你的要求。呵呵。满足别忘了采纳啊。
#include<stdio.h>
char *num[]={
"zero",
"one",
"two",
"three",
"four",
"five",
"six",
"seven",
"eight",
"nine"
};
main()
{
int n=0,i=0;
int str[20],len=0;
scanf("%d",&n);
int *a = (int*)malloc(n*sizeof(int));
for(i=0; i<n; i++)
{
scanf("%d",&a[i]);
}
for(i=0; i<n; i++)
{
len=0;
if(a[i]==0)
{
str[0]=0;
len=1;
}
while( a[i]!=0 )
{
str[len++] = a[i]%10;
a[i]/=10;
}
while(len>0)
{
printf("%s ",num[str[--len]]);
}
printf("\n");
}
free(a);
getch();
}
㈡ c语言:将数字编号翻译成英文编号。
#include<stdio.h>
int main(){
int a[10],i,ind;
char *eng[10]={"zero","one","two","three","four","five","six","seven","eight","nine"};
long num1,num2;
scanf("%ld",&num1);
num2=num1;
ind=0;
while (num2!=0){
a[ind]=num2%10;
ind++;
num2=num2/10; }
printf("%ld English_exp: ",num1);
for(i=ind-1;i>=0;i--){ printf("%s ",eng[a[i]]); }}
对照一下看看
㈢ c语言关键字中英翻译机,要求创建文件搜索
程序使用结构链表实现。
由于我写的函数已经自动识别中英文输入,中英文翻译功能其实可以合并成一个选项(3,4选项),但你题目既然要求2项目,所以没合并。
根据题目,创建字典是覆盖性,既每次创建输入,都会覆盖掉原文件,但考虑后期扩展,我的函数writeFile可以不覆盖,在原文件后新增,具体看备注。
菜单显示是利用递归函数,如果你想新增功能,参照我选项改。
(另外所有函数异常,我都是采取抛出,没有处理,你想处理根据我的函数返回值写处理吧!)
#include<stdio.h>
#include<string.h>
#include<malloc.h>
#define FPATH "C:\keyWord.txt"
typedef struct keyWord
{
char kwCN[20];// 中文名
char kwEN[10];// 英文名
struct keyWord *next;
}KW;
void freeKWS(KW *kwsHead);//释放链表内存
int createDictionary(char *path);//创建字典。成功返回1 失败返回0
int writeFile(char *path,KW *kwsHead,int flag);//写入文件。成功返回1,失败返回0。flag:0新增;1修改或删除
KW *readFile(char *path);//读取文件。成功返回头节点,失败返回NULL。
int isCN(char *strCN);//判断字符串是否是全中文,是返回1,否返回0
void showKWS(char *path,char*keyCN,char *keyEN);//参数全部传NULL打印整个链表。keyCN!=NULL打印对应英文,keyZN!=NULL打印对应中文
void showMenu(int n);//递归函数打印菜单,第一次调用传值-1
void selectByKey(char *keyN);//输入中文输出英文,输入英文输出中,自动识别中英文关键字
int main()
{
//createDictionary("C:\keyWord.txt");
//showKWS(NULL,NULL);
showMenu(-1);
}
void showMenu(int n)//打印菜单
{
char cn[20],en[10];
switch(n)
{
case 1:
createDictionary(FPATH);
break;
case 2:
printf("当前中英文词典的内容: ");
showKWS(FPATH,NULL,NULL);
break;
case 3:
printf("请输入英文关键字:");
scanf("%s",en);
getchar();
selectByKey(en);
break;
case 4:
printf("请输入中文关键字:");
scanf("%s",cn);
getchar();
selectByKey(cn);
break;
case 5:
exit(0);
break;
case -1:
while(1)
{
system("cls");
printf("|***********************电子词典模拟软件***********************| ");
printf("1、创建关键字中英文词典 ");
printf("2、显示关键字中英文词典 ");
printf("3、输入英文关键字,查阅英汉词典 ");
printf("4、输入中文关键字,查阅汉英词典 ");
printf("5、退出 ");
printf("|*********************All rights reserved**********************| ");
printf("请选择菜单中的1或2或3或4或5 ");
scanf("%d",&n);
getchar();
showMenu(n);
}
break;
}
n=-1;
printf("----------按任意键返回上级菜单----------- ");
getchar();
}
void selectByKey(char *keyN)//输入中文输出英文,输入英文输出中,自动识别中英文关键字
{
if(isCN(keyN))
showKWS(FPATH,keyN,NULL);
else
showKWS(FPATH,NULL,keyN);
}
int isCN(char *strCN)//判断字符串是否包含中文,是返回1,否返回0
{
char *p=strCN;
while(*p!=0)
{
if((*p&0x80)==0x80)
return 1;
p++;
}
return 0;
}
void showKWS(char *path,char *keyCN,char *keyEN)//参数全部传NULL打印整个链表。keyCN!=NULL打印对应英文,keyZN!=NULL打印对应中文
{
KW *kwsHead=NULL;
kwsHead=readFile(path);
if(kwsHead)
while(kwsHead->next)
{
if(keyCN!=NULL && keyEN==NULL && strcmp(kwsHead->next->kwCN,keyCN)==0){
printf("对应英文关键字:%s ",kwsHead->next->kwEN);
break;
}
if(keyEN!=NULL && keyCN==NULL && strcmp(kwsHead->next->kwEN,keyEN)==0){
printf("对应中文关键字:%s ",kwsHead->next->kwCN);
break;
}
if(keyEN==NULL && keyCN==NULL)
printf("%s %s ",kwsHead->next->kwEN,kwsHead->next->kwCN);
kwsHead=kwsHead->next;
}
freeKWS(kwsHead);
}
int createDictionary(char *path)//创建字典。成功返回1 失败返回0
{
char cn[20],en[10];
KW *kwsHead=NULL,*kwTail=NULL,*kwNew=NULL;
kwsHead=(KW *)malloc(sizeof(KW));
if(!kwsHead)
return 0;
kwsHead->next=NULL;
printf("请输入关键字中文及英文(每行一组空格分割,输入NULL退出输入): ");
while(1)
{
cn[0]=en[0]=0;
scanf("%s",cn);
if(strcmp(cn,"NULL")==0)
break;
scanf("%s",en);
if(strcmp(en,"NULL")==0)
break;
kwNew=(KW *)malloc(sizeof(KW));
kwNew->kwCN[0]=kwNew->kwEN[0]=0;
kwNew->next=NULL;
strcpy(kwNew->kwCN,cn);
strcpy(kwNew->kwEN,en);
if(kwsHead->next)
kwTail->next=kwNew;
else
kwsHead->next=kwNew;
kwTail=kwNew;
}
getchar();
return writeFile(path,kwsHead,1);
}
KW *readFile(char *path)//读取文件。成功返回头节点,失败返回NULL。
{
FILE *fp=NULL;
char cn[20],en[10];
KW *kwsHead=NULL,*kwTail=NULL,*kwNew=NULL;
kwsHead=(KW *)malloc(sizeof(KW));
if(!kwsHead)
return NULL;
kwsHead->next=NULL;
fp=fopen(path,"r");
if(!fp)
{
printf("文件打开失败! ");
return NULL;
}
fseek(fp,0,SEEK_SET);
while(fscanf(fp,"%s%s",cn,en)!=-1)
{
kwNew=(KW *)malloc(sizeof(KW));
if(!kwNew)
return NULL;
kwNew->next=NULL;
strcpy(kwNew->kwCN,cn);
strcpy(kwNew->kwEN,en);
if(kwsHead->next)
kwTail->next=kwNew;
else
kwsHead->next=kwNew;
kwTail=kwNew;
}
fclose(fp);
return kwsHead;
}
int writeFile(char *path,KW *kwsHead,int flag)//写入文件。成功返回1,失败返回0。flag:0新增;1修改或删除
{
FILE *fp=NULL;
if(flag)
fp=fopen(path,"wt+");
else
fp=fopen(path,"rt+");
if(!fp)
{
printf("文件打开失败! ");
return 0;
}
fseek(fp,0,SEEK_END);
while(kwsHead->next)
{
fprintf(fp,"%s %s ",kwsHead->next->kwCN,kwsHead->next->kwEN);
kwsHead=kwsHead->next;
}
fclose(fp);
printf("数据写入文件成功! ");
freeKWS(kwsHead);
return 1;
}
void freeKWS(KW *kwsHead)//释放链表内存
{
KW *kwDel=NULL;
while(kwsHead->next)
{
kwDel=kwsHead->next;
kwsHead=kwsHead->next;
free(kwDel);
}
free(kwsHead);
}
㈣ 关于c语言设计,将n位数字,每一位转变为英文,859变为eight five nine
因为int型有最大值4294967295,所以用malloc动态生成指定大小的字符串后就不会对输入的数字有位数的限制了。不过我还是建议在c++下用string类或STL来完成此类问题比较方便。
以下是我针对你的问题用C语言写的以下代码,注意,位数应该在输入数字前去输入,这样才比较合理。
另外你的switch语句中缺少对于零值的判断,我对此进行了一些修改。
#include<stdio.h>
#include<stdlib.h>
void Display(char src);
int main()
{
int Size;
char* Num;
printf("输入位数:");
scanf("%d",&Size);
Num=(char *)malloc(sizeof(char)*Size);
printf("请输入你想要的数字:");
scanf("%s",Num);
for(int i=0;i<Size;++i)
Display(Num[i]);
free(Num);
printf("\n");
return 0;
}
void Display(char src)
{
switch(src-'0')
{
case 0:printf("zero ");break;
case 1:printf("one ");break;
case 2:printf("two ");break;
case 3:printf("three ");break;
case 4:printf("four ");break;
case 5:printf("five ");break;
case 6:printf("six ");break;
case 7:printf("seven ");break;
case 8:printf("eight ");break;
case 9:printf("nine ");break;
default:printf("error\n");
}
}
㈤ C语言 编写一个译码程序,把一个英语句子译成数字代码。
#include <stdio.h>
int main ()
{
char c;
while ((c = getchar()) != '\n')
{
if(c==' ')
{
printf("*");
continue;
}
c-=64;
if (c!=-32)
printf ("%d ",c);
}
printf (".");
return 0;
}
试试看符不符合你的要求
㈥ 请用C语言编写一个译码函数,把一个英语句子译成数字代码。译码规则是
#include<stdio.h>
intmain()
{
charc;
while((c=getchar())!=' ')
{
if(c=='')
printf("*");
else
{
if(c>=97&&c<=122)
printf("%d",c-=96);
else
{
if(c>=65&&c<=90)
printf("%d",c-=38);
else
printf("%c",c);
}
}
}
return0;
}
㈦ c语言在线翻译器
这个是大数加法的程序了,
1 先进行分割,
2 然后将对应的字符数字保存为数字逆序放到数组里,
3 在做加法,进位的时候后面以为加,低位和减去10为低位,
4 逆序输出结果
㈧ C语言翻译数字成英文单词的编程
void transLate(char * from,char * to)
{
printf("%s",to[from-'1']);
}
整个函数是错的
传入的第二个参数应该是char**to
第一个参数char*from没有转换成int类型,不可以这样使用,会造成segmentation fault
㈨ 如何用C语言将输入的数字转化成英语
对照字母的ASCII码进行输入数字,然后再输出字母。
和你的相比,不知是否复杂。
此程序的计算范围:0<=num<1000。如果还想要计算更大的数,可以在最后面加判断语句,方法类似。
#include<stdio.h>
void main()
{
char *Eng1[20]={"zero","one","two","three","four","five","six","seven",
"eight","nine","ten","eleven","twelve","thirteen","fourteen","fifteen",
"sixteen","seventeen","eighteen","nineteen"};
char *Eng2[8]={"twenty","thirty","fourty","fifty","sixty","seventy","eighty","ninety"};
int num;
printf("请输入数字: ");
scanf("%d",&num);
printf("对应的英文为: ");
if(num>=0&&num<=19)
printf("%s\n",Eng1[num]);
else if(num<100)
{
int s,y;
s=num/10;
y=num%10;
printf("%s %s\n",Eng2[s-2],Eng1[y]);
}
else if(num<1000)
{
int b,s,y;
b=num/100;
y=num%100;
if(y>9)
{
s=(num%100)/10;
y=(num%100)%10;
if(y==0)
printf("%s hundred and %s\n",Eng1[b],Eng2[s-2]);
else
printf("%s hundred and %s %s\n",Eng1[b],Eng2[s-2],Eng1[y]);
}
else
printf("%s hundred and %s\n",Eng1[b],Eng1[y]);
}
}
㈩ 求C语言1000内将英文翻译成数字,最后一步不能执行,为什么
strcpy(str, str2+k+1);
for (i =0; i<=9; i++)
{
if (strcmp(str1[i], str2) == 0)
printf("%d", i);
}//for
}//if