學習過c語言的人也許有時會遇到這樣乙個問題:如何用變數儲存漢字以及對這些變數進行操作。目前許多c語言參考書中都沒涉及到這個問題,程式中多為處理英文變數和英文本串,涉及到漢字的情況也大都是在printf語句中輸出提示資訊或結果,如:
printf("請輸入a,b的值:\n");
printf("輸出功率為%s千瓦。\n",power);
複製**
考慮到還有相當一部分人在學習和應用c語言,因此在這裡向讀者介紹一下筆者在這方面摸索出來的經驗。
儲存漢字應該用字元陣列,這一點是肯定的,關鍵問題是漢字在你的計算機系統上佔幾個位元組。多數人會認為乙個漢字肯定佔兩個位元組,其實不然。漢字到底佔幾個位元組,這是隨系統不同而不同的,而且還依賴於軟體環境,如visual basic中漢字佔乙個位元組。可以在你的計算機上用strlen()函式測試一下,如:
printf("%d",strlen("計算機"));
複製**
若輸出為6,則每個漢字佔兩個位元組;若輸出12,則每個漢字佔四個位元組。大多數系統是每個漢字佔兩個位元組的,即上述語句輸出值為6。應當注意的是乙個全形字符(包括標點符號)同漢字佔據相同的位元組。本文假定每個漢字佔兩個位元組。
這樣你就可以用字元陣列儲存漢字了,但別忘了,由於c語言中字串是以'\0'作為結束標記的,系統會自動加上這個標記符,而用strlen()函式測試的返回值不包括這個'\0',因此在定義和初始化字元陣列時應當使陣列長度最小為實際字串長再加1,如:
static char name[7]="孫悟空"; /*陣列長度為7說明最多可存放3個漢字*/
複製**
如果把陣列長度定義為6,系統在編譯時並不報錯,但是當執行程式時有時會莫名其妙地重複輸出或多輸出漢字,如果出現這種情況,應當首先考慮陣列長度是否有問題。當然在定義的同時初始化可以省略陣列長度,如:
static char array=;
複製**
同樣可以定義二維陣列,下面這個二維陣列可以存放10個人名:
char member[10][8]; /*10個元素,每個元素中最多能放3個漢字(不是4個!)*/
複製**
因為二維陣列member[10][8]可以看成特殊的一維陣列member[0],member[1],…,member[9],這些一維陣列分別表示各行,而一行就表示了乙個人名,因此如果想操作每個人名,只需寫成member[0],member[1],…而不寫成member[0] [8],member[1][8],…。
順便提一下,在c編譯視窗中輸入漢字需要中文環境。如果讀者用的是dos作業系統,那麼就需要安裝ccdos或ucdos;如果是win95/98作業系統,則在dos命令視窗中執行下面這個批處理檔案即可,而不必另外安裝中文dos系統:
c:\windows>pdos95
在c編輯視窗中用ctrl+空格鍵啟動win95中文輸入法。另外由於c程式是基於dos的,因此編輯、編譯c程式最好在全螢幕狀態,否則容易出現問題。
下面給出乙個例項程式,它的功能是計算出輸入年份的天干地支。
#include "string.h"
main()
內的引號和逗號不能為全形字符*/
static char tg[10][3]=;
static char dz[12][3]=;
printf("請輸入乙個年份:");
scanf("%d",&year);
a=(year-1804)%10; /*以2023年為參考年份,2023年是甲子年*/
b=(year-1804)%12;
strcpy(gz,tg[a]);
strcat(gz,dz[b]);
printf("%d年的干支為:%s\n",year,gz);
}複製**
執行結果:
請輸入乙個年份:1999
2023年的干支為:己卯
zz 如何在C語言程式中處理漢字
學習過c語言的人也許有時會遇到這樣乙個問題 如何用變數儲存漢字以及對這些變數進行操作。目前許多c語言參考書中都沒涉及到這個問題,程式中多為處理英文變數和英文本串,涉及到漢字的情況也大都是在printf語句中輸出提示資訊或結果,如 printf 請輸入a,b的值 n printf 輸出功率為 s千瓦。...
如何在C 中呼叫C程式
c 和c是兩種完全不同的編譯鏈結處理方式,如果直接在c 裡面呼叫c函式,會找不到函式體,報鏈結錯誤。要解決這個問題,就要在 c 檔案裡面顯示宣告一下哪些函式是c寫的,要用c的方式來處理。1.引用標頭檔案前需要加上 extern c 如果引用多個,那麼就如下所示 extern c 然後在呼叫這些函式之...
如何在C 中呼叫C程式?
c 和c是兩種完全不同的編譯鏈結處理方式,如果直接在c 裡面呼叫c函式,會找不到函式體,報鏈結錯誤。要解決這個問題,就要在 c 檔案裡面顯示宣告一下哪些函式是c寫的,要用c的方式來處理。1.引用標頭檔案前需要加上 extern c 如果引用多個,那麼就如下所示 extern c 然後在呼叫這些函式之...