我试图解决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);
}
答案 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);
}
}
}