[CPE一星49題] UVA272 - TEX Quotes 題目解析與實作
編輯製作: 蔡豐聲、莊祺仁
單位: 中國醫藥大學 醫療資訊學系 程式俱樂部
YT: https://youtu.be/aYX7ogK9JVk
## 題目資訊
- 題目名稱: TEX Quotes
- 編號: CPE22131, UVA272
- 相關平台: Zero Judge, Online Judge
## 題目解析
在普通的打字機文件中,雙引號通常是用一個符號 " 來表示 。但在 $\text{TeX}$ 排版系統中,雙引號有方向之分:
- 左雙引號:使用兩個反引號 ` ` 表示 。
- 右雙引號:使用兩個單引號 ' ' 表示 。
本題要求將輸入文本中成對出現的雙引號 ",依序替換為 $\text{TeX}$ 格式的左引號與右引號。
## 輸入說明
- 輸入包含多行文字,其中包含若干雙引號 " 。
- 程式需處理直到檔案結束 (EOF) 。
## 輸出說明
- 將輸入中的第 1、3、5... 個 " 轉換為 ` ` 。
- 將輸入中的第 2、4、6... 個 " 轉換為 ' ' 。
- 其餘字元保持不變輸出 。
## 範例測試
- 輸入:
"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.' '
## 解題思路
- 狀態記錄:
- 需要一個布林變數(例如 is_first)來記錄當前的引號是「左引號」還是「右引號」。
- 初始值設為 True(代表下一個遇到的 " 是左引號)。
- 逐字處理:
- 遍歷輸入字串中的每一個字元。
- 如果字元不是 ",直接原樣輸出。
- 如果字元是 ":若 is_first 為真,輸出 ` ` 並將 is_first 改為 False 。若 is_first 為假,輸出 ' ' 並將 is_first 改為 True。
布林變數亦可改為整數變數,初始值設為偶數,每次遇到「左引號」或是「右引號」,整數變數累加1。用整數變數的奇偶值決定輸出 ` ` 或是 ' '。
## 實作程式碼 (Python)
import sys
# 記是第一個雙引號還是第二個
q = 0
# 用sys.stdin讀入所有的測試資料
for line in sys.stdin:
# 把字串再單獨拆開(逐字處理)
for c in line:
# 如果遇到雙引號
if c == '"':
# 判斷目前是第幾個(偶數個為開引號,奇數個為關引號)
print("``" if q % 2 == 0 else "''", end="")
q += 1
# 一般的字元就直接原樣輸出
else:
print(c, end="")