紫书第三章例题--UVa272
程序员文章站
2022-06-09 19:02:35
...
题目:UVa272
地址:https://vjudge.net/problem/UVA-272
大意:就是把文章中的双引号(英文输入中不分左右的那种引号)改为区分左右的引号。
思路:这是一道水题,就是单纯的输入就行。
① 可以直接边读边处理,而不用把所有字符先存起来再处理,输入的时候可以采用getchar,也可以采用scanf(“%c”)
② 对于左右引号的判断,由于左右引号的切换是以2为周期的,所以可以用01来标记。
编程技巧:
① 可以用”?:”运算符来代替“if…else...”语句
② fgetc(fin),fin为输入源,当fin=stdin时,fgetc(stdin)相当于getchar()
fgets(buf,maxn,fin),buf为字符数组名,maxn为最大上界(这个函数最多读入maxn-1个字符,然后在末尾添上结束符’\0’),fin为输入源,当fin=stdin时,fgets(buf,maxn,fin)相当于gets函数,不过gets函数会不断地向buf存储内容,而不管buf是否能存储下,故在C11标准中已经废除了gets函数。
AC代码:
#include<bits/stdc++.h>
using namespace std;
char ch;
int cnt = 0;
int main(){
while(~scanf("%c",&ch)){
if(ch=='"'&&cnt==0){ //可以改为 printf(“%c”,cnt ? "``" : "''");cnt = !cnt;
printf("``");
cnt = !cnt;
}
else if(ch=='"'&&cnt==1){
printf("''");
cnt = !cnt;
}else printf("%c",ch);
}
return 0;
}