我的答案有问题" Uva tex引用" (间距有问题)

时间:2015-06-26 01:29:26

标签: c quotes tex

我试图解决UVAa Online Judge Problem 272 — TeX Quotes

  

输入将包含多行文本,其中包含偶数个双引号(")字符。输入以文件结束字符结束。除了以下内容之外,文本必须完全按照输入输出:

     
      
  • 每对中的第一个"被两个`字符替换:``
  •   
  • 每对中的第二个"被两个'字符替换:''
  •   

我不知道为什么我的代码会给出错误的答案;我认为这是正确的答案。

#include <stdio.h>
#include <stdbool.h>
#include <string.h>
int main(){
    char kalimat[100000];
    int i;
    int max;
    bool flag=true;
    while (scanf("%c",&kalimat)!=EOF){
        max=strlen(kalimat);
        for (i=0;i<=max;i++){
            if (kalimat[i]=='"')
            {
                if (flag==true){
                    printf("``");
                    flag=false;
                } else {
                    printf("''");
                    flag=true;
                }
            } else {
                printf("%c",kalimat[i]);
            }
        }
    }
    return(0);
}

1 个答案:

答案 0 :(得分:0)

请注意,scanf(&#34;%c&#34;,&amp; kalimat)一次只能读取1个(一个)字符。因此strlen(kalimat)将始终为1.不是实际问题,而是奇怪的(例如,您可以声明char kalimat而不是char数组,而不使用索引或for循环)。

然而,你的for循环从0到最大包含,因此kalimat将被索引越界,并导致未定义的行为。也许你的问题就在那里。

实际上,由于kalimat是单个字符,因此它不会有终止'\0'字符,因此不是有效的C字符串。因此strlen永远无法计算正确的长度(即1)。

试试这个:

char kalimat;
...
while (scanf("%c", kalimat) != EOF) {
        if (kalimat == '"') {
            if (flag){
                printf("``");
                flag = false;
            } else {
                printf("''");
                flag = true;
            }
        } else {
            printf("%c", kalimat);
        }
    }
}