“替换打开和关闭的代码”;不同字符串(UVa 272-Tex引号)不起作用 我编写了C++代码。问题基本上是用`替换开头的“,用'替换结尾的”

“替换打开和关闭的代码”;不同字符串(UVa 272-Tex引号)不起作用 我编写了C++代码。问题基本上是用`替换开头的“,用'替换结尾的”,c++,algorithm,C++,Algorithm,这很容易,但我得到了错误的答案。有人能帮我找到代码的问题吗 样本输入: "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!" 样本输出: ``To be or not to be,'' quoth the Bard, ``that

这很容易,但我得到了错误的答案。有人能帮我找到代码的问题吗

样本输入:

"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!"
样本输出:

``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!''
代码:

#包括
#包括
#包括
#包括
使用名称空间std;
int main(){
字符串输入字符串;
while(getline(cin,inputString)){
int nDoubleQuotes=0;
对于(int i=0;i<(int)inputString.length();++i){
if(inputString[i]='''”){
++双引号;
nDoubleQuotes=nDoubleQuotes%2;
如果(nDoubleQuotes==1)

cout不幸的是,您的代码甚至没有通过示例testcase!无论如何,只需将这一行,
int nDoubleQuotes=0;
循环中取出(getline(cin,inputString))
循环,您需要这样做的原因是,在输入文件中有一个引号(“)可以在一行中开始,也可以在下面的任何其他行中结束,如问题陈述中的示例测试用例所示:

The programming contestant replied: "I must disagree. #quote start on this line
To `C' or not to `C', that is The Question!" #quote ends on this

如果您在每一行初始化quote计数器变量,那么您假设quote标记开始和结束在同一行,这是错误的。

不幸的是,您的代码甚至没有通过示例测试用例!总之,只需将这一行,
int nDoubleQuotes=0;
放在
while(getline(cin,inputString))
loop,您需要这样做的原因是,在输入文件中,引号(“)可以从一行开始,也可以在下面的任何其他行结束,正如问题陈述中的示例测试用例所示:

The programming contestant replied: "I must disagree. #quote start on this line
To `C' or not to `C', that is The Question!" #quote ends on this

如果在每一行上初始化quote计数器变量,则假定quote标记开始和结束在同一行上,这是错误的。

您可以通过一次读取一个字符来解决此问题。您需要跟踪是否在quote内,以便打印正确的替换内容

#包括
int main()
{
bool inquote=false;
char ch;
while(std::cin.get(ch)){
如果(ch==“”){

std::cout您只需一次读取一个字符就可以解决此问题。您需要跟踪您是否在引号内,以便打印正确的
替换项

#包括
int main()
{
bool inquote=false;
char ch;
while(std::cin.get(ch)){
如果(ch==“”){

std::你真的应该对你想做的事情做足够的解释吗?如果链接失效,你的问题将保持有意义。你好,我认为问题是getline。请检查我的更新答案。顺便说一句,比拥有一个整数、增加它并将其限制为模2更简单的是拥有一个
bool-inQuotes=false;
而不是增量和剪裁,只需执行
inQuotes=!inQuotes;
来翻转标志。你应该包含足够的关于你试图做什么的解释,这样你的问题在链接失效时仍然有意义。您好,我想问题是getline。请检查我更新的答案。顺便说一句,比使用整数更简单,增加它并将其限制为模2将是一个
bool-inQuotes=false;
而不是增加和剪裁,只需执行
inQuotes=!inQuotes;
来翻转标志。干得好:D,我没有看到!@sowrov:虽然我有一个AC,但我仍然想知道为什么我不能包含双引号变量I在while循环中,我得到了样本输入的正确答案,对于我尝试过的许多其他测试用例,我认为它与while循环外的测试用例具有相同的效果,在奇数个引号处,nDoubleQuotes将是1,并且每个句子在句子末尾的偶数个引号处结束,nDoubleQuotes必须是0,并且相同我试图为每个字符串分别实现的东西,出了什么问题?您能解释一下吗?问题是您为输入中的每一行重新启动外部循环。如果
nDoubleQuotes
变量在循环内,它将超出范围并重新出现(并重新初始化为0)在下一次迭代中。换句话说,您正在重置“我在引号中吗?”"声明每行文本。干得好:D,我没有看到!@sowrov:虽然我用它得到了一个AC,但我还是想知道为什么我不能在while循环中包含双引号变量,我得到了样本输入的正确答案,对于我尝试过的许多其他测试用例,我认为它与while之外的测试用例具有相同的效果循环,在奇数个引号处,nDoubleQuotes将是1,因为每个句子在句子末尾的偶数个引号处结束,nDoubleQuotes必须是0,而我试图为每个字符串分别实现的相同点是,出了什么问题?你能解释一下吗?问题是你为输入中的每一行重新启动外部循环。如果
nDoubleQuotes
变量在循环中,它将超出范围并在下一次迭代中重新出现(并重新初始化为0)。换句话说,您正在为每行文本重置“我在引号中”状态。
#include <iostream>

int main()
{
    bool inquote = false;
    char ch;
    while (std::cin.get(ch)) {
        if (ch == '"') {
            std::cout << (inquote ? "''" : "``");
            inquote = !inquote;
        } else {
            std::cout << ch;
        }
    }
}