Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C Morgan和字符串算法_C_Algorithm - Fatal编程技术网

C Morgan和字符串算法

C Morgan和字符串算法,c,algorithm,C,Algorithm,我正在从以下链接尝试解决此问题: 杰克和丹尼尔是朋友。他们俩都喜欢字母,尤其是 大写的。他们从报纸上剪下大写字母, 他们每一个人都有自己的信件收藏 分开堆放。一个美好的日子,摩根拜访了杰克和丹尼尔。 他看到了他们的收藏。摩根想知道这是怎么回事 字典最小字符串,由这两个集合组成。他能 当一封信在书堆顶部时,从书堆中取出一封信。 此外,摩根希望使用男孩收藏中的所有字母 我的代码如下: #include <stdio.h> #include <string.h> #inclu

我正在从以下链接尝试解决此问题:

杰克和丹尼尔是朋友。他们俩都喜欢字母,尤其是 大写的。他们从报纸上剪下大写字母, 他们每一个人都有自己的信件收藏 分开堆放。一个美好的日子,摩根拜访了杰克和丹尼尔。 他看到了他们的收藏。摩根想知道这是怎么回事 字典最小字符串,由这两个集合组成。他能 当一封信在书堆顶部时,从书堆中取出一封信。 此外,摩根希望使用男孩收藏中的所有字母

我的代码如下:

#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>

int main() {
    int flag,choice;
    long n,i,j=0,k=0,x,y;
    char *a,*b;
    a=(char*)malloc(sizeof(char)*100000);
    b=(char*)malloc(sizeof(char)*100000);
    scanf("%ld",&n);
    for(i=0;i<n;i++){
        j=k=0;
        scanf("%s%s",a,b);
        x=strlen(a);
        y=strlen(b);
        while(x<y)a[x++]='Z'+1;
        while(y<x)b[y++]='Z'+1;
        a[x]=b[y]='\0';
        while(j<x && k<y && (a[j]!=('Z'+1) && b[k]!=('Z'+1))){

            if(strcmp(a+j,b+k)<0)printf("%c",a[j++]);
            else printf("%c",b[k++]);

        }
        while(j<x && a[j]!=('Z'+1))printf("%c",a[j++]);
        while(k<y && b[k]!=('Z'+1))printf("%c",b[k++]);
        printf("\n");
    }

    return 0;
}
预期和正确输出:

cac

以下内容不适用:

输入:

1
c
ca
1
zbc
aaaaz
预期产出:

aaaazbcz

实际产量:

aaaazzbc


我遗漏了什么?

我现在知道了。下面的情况如何

1
zbc
aaaaz

正如你在4
a
之后看到的那样,我们只剩下a
z
zbc[[
其中
[/code>是
'z'+1
。显然,
z
你的输入缓冲区短了一个字符。另外,不要强制转换
malloc()
。这绝对不是我的问题。虽然,我应该像你说的那样多留一个字符,但没有一个测试用例字符串达到这么高的程度。我会注意你关于类型转换的建议。我花了一些时间来用一个较短的用例来破坏我的代码。但是当我把测试用例短到可以发布到这里时,我也明白了在哪里问题是假的。我现在已经发布了解决方案。下次发布问题时,我会考虑你的观点。@MayankVerma啊!我想每个经常在这个网站上发布的人都会发生这种情况,我认为这是一件好事。将问题和测试用例减少到发布问题的最小值通常会暴露错误。如果您可以编辑问题,使其包含未通过原始代码的缩短测试用例,并使问题更加具体,我将删除我的投票。编辑得好。我已撤回我的投票。(我还删除了“更新”)您添加的内容。只需在下面添加答案就足够了。无需在问题本身中大声说出答案。问题应保持独立且尽可能无噪音。)
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>

int main() {
    int flag,choice;
    long n,i,j=0,k=0,x,y;
    char *a,*b;
    a= malloc(sizeof(char)*200000);
    b= malloc(sizeof(char)*200000);
    scanf("%ld",&n);
    for(i=0;i<n;i++){
        j=k=0;
        scanf("%s%s",a,b);
        x=strlen(a);
        y=strlen(b);
        while(x<y)a[x++]='Z'+1;
        while(y<x)b[y++]='Z'+1;
        a[x]=b[y]='\0';
        while(j<x && k<y && (a[j]!=('Z'+1) && b[k]!=('Z'+1))){

            if(strcmp(a+j,b+k)<0){printf("%c",a[j++]);a[x++]='Z'+1;a[x]='\0';}
            else {printf("%c",b[k++]);b[y++]='Z'+1;b[y]='\0';}

        }
        while(j<x && a[j]!=('Z'+1))printf("%c",a[j++]);
        while(k<y && b[k]!=('Z'+1))printf("%c",b[k++]);
        printf("\n");
    }

    return 0;
}