UVA272 TeX中的引号 TEX Quotes(洛谷-UVA272)
题目描述
编写程序处理输入文本,将文本中所有普通直双引号 " 按出现顺序交替替换:第 1、3、5 等奇数位置的 " 替换为两个反引号 ``,第 2、4、6 等偶数位置的 " 替换为两个单引号 ‘’,其余字符保持原样,最终输出转换完成后的完整文本。
输入格式
输入由多行文本组成,文本中双引号 " 的总数量为偶数;输入以文件结束符作为终止标记。
输出格式
输出文本需要和输入文本内容、排版完全保持一致,仅有以下两处替换规则:
- 每一对双引号里的第一个 ",替换为两个反引号 ``;
- 每一对双引号里的第二个 ",替换为两个单引号 ‘’。
输入输出样例
输入 #1复制运行
"To be or not to be,"quoth theBard,"that is the question".Theprogramming contestant replied:"Imustdisagree.To`C' or notto`C',that isTheQuestion!"输出 #1复制运行
``Tobe or nottobe,'' quoth theBard,``that is the question''.Theprogramming contestant replied:``Imustdisagree.To`C' or notto`C',that isTheQuestion!''题目分析与解题思路
题目规则
- 只处理字符 ",其余字符完全保留不变;
- 引号替换是按出现顺序奇偶切换;
第 1、3、5… 奇数个 " → ``
第 2、4、6… 偶数个 " → ‘’ - 需要一个标记变量记录当前遇到的是第几个双引号,每碰到一次 " 就翻转标记状态。
解题思路
- 读取完整输入文本,包含空格、换行等;
- 创建布尔标记 flag,初始为 true,代表下一个双引号该换成左引号;
- 遍历文本每一个字符:
- 如果当前字符不是 ",直接拼接到结果;
- 如果是 ":flag=true 用 ``,再把 flag置为 false;flag=false 用 ‘’,再把 flag 置为 true;
- 遍历结束,输出拼接好的结果字符串。
解题代码
importjava.util.Scanner;publicclassTexQuotes{publicstaticvoidmain(String[]args){Scannerscanner=newScanner(System.in);booleanflag=true;//循环读取每一行while(scanner.hasNextLine()){Stringline=scanner.nextLine();Stringoutput="";for(inti=0;i<line.length();i++){//取字符charch=line.charAt(i);//判断是否为"if(ch=='"'){if(flag){output=output+"``";}else{output=output+"''";}flag=!flag;}else{output=output+ch;}}System.out.println(output);}scanner.close();}}评审结果