例题3-1 TeX中的引号(Tex Quotes, UVa 272)《算法入门竞赛经典第二版》

在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''.

scanf("%s")碰到空格或者TAB就会停下来。 虽然下次调用时会输入下一个字符串,可是不知道两次输入的字符串中间有多少个空格、 TAB甚至换行符。

不同操作系统的回车换行符是不一致的。 Windows是“\r”和“\n”两个符,Linux是“\n”,而MacOS是“\r”。 如果在Windows下读取Windows文件,fgetc和getchar会把“\r""吃掉”,只剩下“\n”;但如果要在Linux下读取同样一个文件,它们会忠实地先读取“\r”,然后才是“\n”。

第一种方法是使用“fgetc(fin)”,它读取一个打开的文件fin,读取一个字符,然后返回一个int值。 为什么返回的是int而不是char呢?因为如果文件结束,fgetc将返回一个特殊标记EOF,它并不是一个char。 如果把fgetc(fin)的返回值强制转换为char,将无法把特殊的EOF和普通字符区分开。 如果要从标准输入读取一个字符,可以用getchar,它等价于fgetc(stdin)。

使用fgetc(fin)可以从打开的文件fin中读取一个字符。 一般情况下应当在检查它不是EOF后再将其转换成char值。 从标准输入读取一个字符可以用getchar,它等价于fgetc(stdin)

#include<stdio.h>
int main() {
	int c, q = 1;
	while((c = getchar()) != EOF) {
	if(c == '"') { 
		printf("%s", q ? "``" : "''"); 
		q = !q;
	 }else{
	 	printf("%c", c);
	 }
	} 
	return 0;
}
发布了58 篇原创文章 · 获赞 10 · 访问量 5472

猜你喜欢

转载自blog.csdn.net/qq_43476433/article/details/104320065