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