如果原始檔檔內容是:

“To be or not to be,” quoth the bard, “that is the question.”

則 TeX 做出來的檔和我們想像的並不一樣:

“To be or not to be,” quoth the bard, “that is the question.”

為了要得到上面的檔,我們需要把原始檔變成這個樣子:

“To be or not to be,” quoth the bard, “that is the question.”

現在要求程式師寫一個程式,將普通的雙引號(“),轉成有方向性的雙引號,而其它文字則不變。而在把普通的雙引號換掉的時候,要特別注意,當要開始引述一句話時要用 “ ,而結束引述時要用 ” 。不用擔心會有多層巢狀引號的情形,也就是第一個引號一定是用 “ 來代替,再來用 ”,然後用 “ ,接著用 ” ,依此類推。

Input and Output 輸入及輸出格式

輸入是若干列的文字,其中有偶數個雙引號( “ ),以 end-of-file 做結束。輸出的文字必須和輸入的一模一樣,除了:

每一組雙引號的第一個 “ 必須用兩個 ` 字元(就是 “ )來代替
每一組雙引號的第二個 “ 必須用兩個 ‘ 字元(就是 ”)來代替。

Sample Input 輸入樣例

“To be or not to be,” quoth the Bard, “that

is the question”.

The programming contestant replied: “I must disagree.

To `C’ or not to `C’, that is The Question!”

Sample Output 輸出樣例

“To be or not to be,” quoth the Bard, “that

is the question”.

The programming contestant replied: “I must disagree.

To `C’ or not to `C’, that is The Question!”

Hints 特別注意

請嚴格按照標準輸出格式輸出資料,否則無法被裁判系統所接納(Accept 正確)
衷心感謝張偉娜老師和付春英老師對本題提出的意見

Answer解法參考

** 題目分析 **
這道題目是一道處理字串陣列的演算法題,是要我們通過遍歷字串陣列,找出雙引號( “ )並替換掉。但本題目有難點就是左側的雙引號和右側的雙引號是不同的。因此我們需要建立一個計數變數來分清到底是左雙引號還是右雙引號,以便正確替換。另外,ACM-ICPC有嚴格的輸出標準,請大家注意在一組測試全部資料輸出完成之後加上換行哦。

參考解法 By OuSheobin

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include<stdio.h>
#include<string.h>
#define MAXN 100
char text[MAXN];
int main(){
int count=0;
while(gets(text)){

int len=strlen(text);

for(int i=0;i<len;i++){

if ( text[i] == ‘”‘ ) {

if ( ++ count % 2 )

printf(““”);

else printf(“””);

}

else putchar(text[i]);

printf(“\n”);

}

}

return 0;

}

歡迎大家提出自己更優化的建議哦!

“電腦語言設計猶如在公園裡漫步。我是說侏羅紀公園。”

—— Larry Wall,Perl的設計者