zoukankan      html  css  js  c++  java
  • 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''.

    本题的关键有两个:输入字符串和判断左右括号。

    1、输入字符串。

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

      可以用下述两种方法解决这个问题:

      ①使用“fgetc(fin)”,它读取一个打开的文件fin,读取一个字符,然后返回一 个int值。如果文件结束,fgetc将返回一个特殊标记 EOF,这样可以判断是否输入结束。如果要从标准输入读取一个字符,可以用getchar,它等价于fgetc(stdin)。注意:在使用fgetc和getchar时,应该避免写出和操作系统相关的程序。

      ②使用“fgets(buf, maxn, fin)”读取完整的一行,其中buf的声明为char buf[maxn]。这个函数读取不超过maxn-1个字符,然后在末尾添上结束符“”,因此不会出现越界的情况。之所以说可以用这个函数读取完整的一行,是因为一旦读到回车符“ ”,读取 工作将会停止,而这个“ ”也会是buf字符串中最后一个有效字符(再往后就是字符串结束 符“”了)。只有在一种情况下,buf不会以“ ”结尾:读到文件结束符,并且文件的最后一 个不是以“ ”结尾。即:除了在文件结束前没有遇到“ ”这种特殊情况外,buf总是 以“ ”结尾。当一个字符都没有读到时,fgets返回NULL。

    2、判断左右分号。

      用一个标识变量q来判断。

    #include<cstdio>
    using namespace std;
    int main(){
        int c,q=1;
         while((c=getchar()) !=    EOF){
             if(c=='"'){
                 printf("%s",q?"``":"''");
                 q=!q;
             }
             else printf("%c",c);
         }
        return 0;
    }

    注意:①(c=getchar()) !=    EOF   ②三目运算符

  • 相关阅读:
    MAC下cocos2dx环境搭建
    eclipse混淆打包出错
    eclipseme升级
    MyEclipse 10 中增加插件
    j2me图片处理大全
    关于svn使用
    NFS相关
    BMP文件格式图解
    UDA1341TS
    OpenOCD初始化脚本(uboot)
  • 原文地址:https://www.cnblogs.com/LOW-ctfer/p/10353060.html
Copyright © 2011-2022 走看看