iT邦幫忙

1

【C語言】如何將輸入字串的句點替換成驚嘆號,原本的驚嘆號換成兩個驚嘆號

  • 分享至 

  • xImage
  •  

這是在FB的:Taiwan Programming Language Study Group 台灣程式語言讀書會 有人提問,一時手癢就寫了一下,給有需要的人參考:

/*
如何將輸入字串中的句點替換成驚嘆號,原本的驚嘆號換成兩個驚嘆號
*/

#include<stdio.h>
#include <conio.h>
#define BUF_SIZE 50

int main(void){
	
	char ch = '\0';
	char src_buf[BUF_SIZE] = {'\0'};
	int get_char_count = 0;
	printf("輸入一字串,並使用'#'作結束.\n");
	printf("輸入字串        :");
	while (ch != '#'){
		// 為了判斷enter鍵,不能寫在while裡
		ch = getch(); 
		if(ch == '\r'){
			continue; // pass enter鍵	
		}		
		// 輸入'.'置換成'!'
		if(ch == '.'){
			ch = '!';	
		// 輸入'!',多存一次	
		}else if(ch == '!'){
			src_buf[get_char_count++] = ch;
			printf("%c", ch);
		}	
		/* 1.為了處理enter鍵,故這邊要再判斷一次。
	       2.不要把'#'存入buffer以及顯示出來。	
		*/
		if(ch != '#'){
			src_buf[get_char_count++] = ch;
			printf("%c", ch);				
		}
		// 防止輸入長度過長
		if(get_char_count >= BUF_SIZE-1){
			ch = '#';
			src_buf[BUF_SIZE-1] = '\0';
			printf("   ...超出buffer長度,");
		}
	}		
	printf("   ...輸入結束\n");
	printf("列印所存的buffer:%s", src_buf);
	return 0;
}

說明:

  1. getch()能即時回傳輸入字元。此函式不是標準的,故在linux的環境下,需用別的函式。改天有空再試試。
  2. 下列程式片段說明:
     	if(get_char_count >= BUF_SIZE-1){			
     		printf("   ...超出buffer長度,");
     		src_buf[BUF_SIZE-1] = '\0';
     		ch = '#';
     	}
    
    2-1. 也可以寫成==,但萬一在別的地方更改get_char_count,以至於超過BUF_SIZE,陣列存取就會溢位。
    2-2. src_buf[BUF_SIZE-1] = '\0';主要是讓buffer最後一個字元固定為字串結束符號'\0',雖不寫在printf("%s",src_buf)"有時"不會出問題。但還是要謹慎點,讓陣列有字串結束符號。
    2-3. ch = '#'; 是讓程式判斷離開。或者寫break;直接離開while迴圈也是可以。

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言