在Tex中,左双引号是" `` ",右双引号是“ '' ” .输入一篇包含双引号的文章,你的任务是把它转换成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''.
分析题目:
由题可知,我们需要判断双引号是左双引号,还是右双引号,我们可以用一个标志变量来判断,就像竖式问题中的ok一样,设ok = 1先输入的肯定是左双引号,然后再将ok = !ok,下一次肯定就是右双引号了,用ok = !ok即使重复循环也是一样,而用ok = 0不行,这与竖式问题中就有所区别了。这里我们要输入的字符串中包含了空格,所有不能使用scanf(),那我们可以使用getchar()
getchar()是stdio.h中的库函数,它的作用是从stdin流中读入一个字符,也就是说,如果stdin有数据的话不用输入它就可以直接读取了,第一次调用getchar()时,需要人工的输入,但是如果你输了多个字符,以后的getchar()再执行时就会直接从缓冲区中读取了。
getchar()返回值:该函数以无符号 char 强制转换为 int 的形式返回读取的字符,如果到达文件末尾或发生读错误,则返回 EOF。
代码如下:
#include<stdio.h>
int main(){
int ch;
int ok = 1;
while((ch =getchar()) != EOF){
if(ch == '"'){
printf("%s", ok ? "``" : "''");
ok = !ok;
}
else{
printf("%c", ch);
}
}
return 0;
}
但是上面代码右bug,会无限循环。我又去搜了getchar()的返回值,是EOF没问题但就是有问题。然后我尝试把printf("%c", ch)变成printf("%d", ch)发现返回了一个10,然后将代码修改如下:
#include<stdio.h>
int main(){
int ch;
int ok = 1;
while((ch =getchar()) != 10){
if(ch == '"'){
printf("%s", ok ? "``" : "''");
ok = !ok;
}
else{
printf("%d", ch);
}
}
return 0;
}
程序就可以成功运行,然后我又将%d改为%c结果也是可以成功运行的。