2011年11月23日 星期三

反向輸出字串

開發語言:Visual C++ 2008
其實原理很容易,只要知道字元陣列(字串)最後一個結尾是'\0'這個字元就可以知道字串的長度,然後再由長度去跑遞減的迴圈即為答案

解題過程:
step1:取得輸入的字串長度


//計算輸入的字串長度
int i = 0 ; //初始值 = 0

//偵測字串的結尾符號
while( true ) {
if ( input[i] == '\0' ) //如果偵測到結尾符號 \0
break ;
else //如果不是 字串長度 + 1
i = i + 1 ;
}
//------------------------------------------------
step2:反向輸出,從最後一個字元(字串長度 - 1),一直跑到0

for ( i = i - 1 ; i >= 0 ; i --)
printf("%c" , input[i]) ;
//------------------------------------------------
讀檔部分:


//1000個字元可以輸入
char input[1000] ;

//檔案指標指向a.txt 這個檔案
FILE *f = fopen("a.txt" , "r") ;
//從檔案讀取資料
fscanf(f , "%s" , &input ) ;
//關閉檔案
fclose(f) ;

進階分享:
如果存放的內容是中文字怎麼辦?
解:中文字存放內容的方式是兩個byte(char)空間,只要每次輸出兩個byte就可以了;另外判斷中文字的方法,中文字第一個byte的ascii有沒有落於 0~127之間就行了.


程式碼:

//反向輸出(從最後一個字元開始輸出)
for ( i = i - 1 ; i >= 0 ; i --) {
if ( (int)input[i-1] > 127 || (int) input[i-1] < 0){
printf("%c%c" , input[i-1] , input[i]) ;
i -= 1 ;
}
else
printf("%c" , input[i]) ;
}




完整程式碼 : 下載
測試檔案: 下載
完整的project: 下載

沒有留言: