Tex Quotes UVa 272

漆雕博
2023-12-01

题意:

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

AC代码:

#include<iostream>
using namespace std;
int main() {
    char c;
    int q = 1;
    while ((c = getchar()) != EOF) {
        if (c == '"') {
            string ans = q ? "``" : "''";
            q = !q;
            cout << ans;
        }
        else cout << c;
        
    }
    return 0;
}

拓展知识:

之前学习了使用“scanf("%s")”输入字符串,但却不能在本题中使用它,因为它碰到空格 或者TAB就会停下来。虽然下次调用时会输入下一个字符串,可是不知道两次输入的字符串 中间有多少个空格、TAB甚至换行符。可以用下述两种方法解决这个问题:

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

如果要从标准输入读取一个字符,可以用getchar(),它等价于fgetc(stdin)。

提示:使用fgetc(fin)可以从打开的文件fin中读取一个字符。一般情况下应当在检 查它不是EOF后再将其转换成char值。从标准输入读取一个字符可以用getchar,它等价于 fgetc(stdin)。 fgetc和getchar将读取“下一个字符”,因此需要知道在各种情况下,“下一个字符”是哪 个。

如果用“scanf("%d", &n)”读取整数n,则要是在输入123后多加了一个空格,用getchar读 取的将是这个空格;如果在“123”之后紧跟着换行,则读取到的将是回车符“\n”。 这里有个潜在的陷阱:不同操作系统的回车换行符是不一致的。Windows是“\r”和“\n”两 个字符,Linux是“\n”,而MacOS是“\r”。如果在Windows下读取Windows文件,fgetc和getchar 会把“\r""吃掉”,只剩下“\n”;但如果要在Linux下读取同样一个文件,它们会忠实地先读 取“\r”,然后才是“\n”。如果编程时不注意,所写程序可能会在某个操作系统上是完美的,但 在另一个操作系统上就错得一塌糊涂。当然,比赛的组织方应该避免在Linux下使用Windows 格式的文件,但正如前面所强调过的:选手也应该把自己的程序写得更鲁棒,即容错性更好。

 类似资料:

相关阅读

相关文章

相关问答