TeX中的引号

在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结果也是可以成功运行的。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

My_YueR

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值