【问题标题】:Array Sorting and Merging数组排序和合并
【发布时间】:2014-05-17 09:00:54
【问题描述】:
#include<stdio.h>
#include<string.h>

int main(){
    char a[10],b[10],temp;
    int lena,lenb,i,j,k;
    scanf("%s %s",&a,&b);
    lena = strlen(a);
    lenb = strlen(b);
    char c[lena+lenb];
    for(i=0;i<lena;i++){
        for(j=0;j<lena;j++){
            if(a[i]<a[j]){
                temp = a[i];
                a[i] = a[j];
                a[j] = temp;
            }
        }
    }
     for(i=0;i<lenb;i++){
        for(j=0;j<lenb;j++){
            if(b[i]<b[j]){
                temp = b[i];
                b[i] = b[j];
                b[j] = temp;
            }
        }
    }
    i=0;j=0;
    for(k=0;k<(lena+lenb);k++){
        if(i<lena && j<lenb){
        if(a[i]<b[j]){
            c[k]=a[i];i++;
        }
        else{
            c[k]=b[j];j++;
        }
        }
        else if(i==lena){
            c[k]=b[j];
            j++;
        }
        else if(j==lenb){
            c[k]=a[i];
            i++;
        }


    }
    printf("%s",c);
}

使用这段代码,我得到两个数组 a 和 b,在对它们进行线性排序后,我通过合并 a 和 b 来创建一个数组 c。 现在我附上一张显示样本 i/p 和 o/p 的图像。我不明白为什么 o/p 结尾有

【问题讨论】:

  • printf("%s",c); : c 不是空终止。
  • 我不明白你,请你详细说明。
  • 最后,我能够纠正错误并获得预期的 o/p,但你能告诉我,为什么会这样吗?
  • C 中的字符串操作是假设它以'\0' 完成的。 '\0'未完成访问异常或显示垃圾。

标签: c arrays merge


【解决方案1】:

scanf("%s %s",&amp;a,&amp;b); --> scanf("%s %s", a, b);

char c[lena+lenb]; --> char c[lena+lenb+1];

printf("%s",c); --> c[k]='\0';printf("%s\n",c);

【讨论】:

  • 我还有一个疑问,上面的程序在以下情况下运行良好:a = is b = it output = iist 为什么在这种情况下没有出现问题?
  • @Nishu 幸好好像没问题。 (也许,垃圾是0)