TeX is a typesetting language developed by Donald .

If the source contained

"To be or not to be," quoth the bard, "that is the question."

then the typeset document produced by TeX would not contain the desired form:

``To be or not to be," quoth the bard, ``that is the question."

In order to produce the desired form, the source file must contain the sequence:

``To be or not to be,'' quoth the bard, ``that is the question.''

You are to write a program which converts text containing double-quote (") characters into text that is identical except that double-quotes have been replaced by the two-character sequences required by must be replaced by ``, the next by '', the next by ``, the next by '', the next by ``, the next by '', and so on.

Input

Input will consist of several lines of text containing an even number of double-quote (") characters. Input is ended with an end-of-file character.

Output

The text must be output exactly as it was input except that:

  • the first " in each pair is replaced by two ` characters: `` and
  • the second " in each pair is replaced by two ' characters: ''.

Sample Input

"To be or not to be," quoth the Bard, "that
is the question".
The programming contestant replied: "I must disagree.
To `C' or not to `C', that is The Question!"

Sample Output

``To be or not to be,'' quoth the Bard, ``that
is the question''.
The programming contestant replied: ``I must disagree.
To `C' or not to `C', that is The Question!''

这个题的意思是把输入文件中的"替换成``,
"替换成''
按照紫书刘汝佳的算法,这个东西不需要保存直接读入读出即可。
代码:
#include <iostream>
using namespace std;
main()
{
    int q=1;
    char c;
    while((c=getchar())!=EOF)
    {
        if(c=='"')
        {
            printf("%s",q?"``":"''");
            q=!q;
        }
        else
        printf("%c",c);
    }
}

经过实验发现c=getchar()可以避免空格的问题,在不存储输入一行的string中有着很好的作用且(c=getchar())!=EOF还是比较少用需要注意。

这里需要一个开关,刘汝佳给出的做法是q=!q;这样直接保证bool的true和false转换。

我的思路是直接用string类搜索求解(但是目前还不知道哪里出现了问题。。。)

在此整理一下STL的基本对象函数erase insert

xxxx.insert()

我个人简单的感觉分为两类,一类是set之类的容器直接用

insert(value)即可

另一种就是string之类的容器需要进行定位

string可以用数组一样的下标去表示。

insert(index,value,cnt)

也可以用迭代器进行

insert(pos,value,cnt)

cnt代表插入的个数而vector之类的容器应该是只能用迭代器去进行插入。

还有一个关键的地方是这些容器的cnt都是在value前面,例如vec.insert(pos,cnt,value)

xxxx.erase()

同样也是分两类。set的容器因为值都是特殊的,所以可以用特殊的erase(key_value)来进行删除的操作。

其他的还有string是特殊的,它可以用index来进行删除但是注意:

如果你只写一个index是从index到pos一块删除,所以要用index,index+1来进行删除,当然也可以用pos的迭代器。

其他的没有什么特别的了,基本上,一般就是pos,pos,pos+n.

相关文章: