【问题标题】:Union of two arrays alternating the value?两个数组交替值的联合?
【发布时间】:2016-01-21 09:41:20
【问题描述】:

我有两个字符数组:a,b。如何使用循环“for”创建新数组 vet,它是两个交替数组 a、b 的并集?

#include <stdio.h>

int main(void) {
    char a[] = "BNSIO";
    char b[] = "EISM\a";
    char vet[sizeof(a) + sizeof(b)];
    for (int i = 0; i < (sizeof(a) + sizeof(b)); i++) {

    }
    for (int i = 0; i < (sizeof(a) + sizeof(b)); i++){
        printf("%c", vet[i]);
    }
}

【问题讨论】:

  • 你知道ab 大小一样吗?
  • char vet[sizeof(a) + sizeof(b)]; 这分配了过多的 1 个字节,因为您正在为两个空终止符分配空间。正确的代码是:sizeof(a)-1 + sizeof(b)-1 + ... + sizeof(n)-1 + 1

标签: c arrays algorithm


【解决方案1】:

你可以试试这个:

for (int i = 0,j=0,k=0; k < (sizeof(a) + sizeof(b) -2);) 
{
    if(i+1<sizeof(a))
    {
        vet[k] = a[i];
        i++;k++;
    }
    if(j+1<sizeof(b))
    {
        vet[k] = b[j];
        j++;k++;
    }       
}
for (int i = 0; i < (sizeof(a) + sizeof(b)-2); i++){
    printf("%c", vet[i]);
}

你需要为空终止字符减去 1

【讨论】:

    【解决方案2】:

    对于两个数组的交替值,试试这个(假设长度相等):

    int main()
    {
        int i;
        char a[] = "BNSIO";
        char b[] = "EISM\a";
        char vet[sizeof(a) + sizeof(b)];
    
        for( i = 0; i < sizeof(a); i++) {
            vet[2*i] = a[i];
            vet[2*i+1] = b[i];
        }
    
        for(i = 0; i < sizeof(vet) ; i++){
            printf("%c", vet[i]);
        }
    }
    

    【讨论】:

    • 这在a和b大小不同的情况下不起作用,至少在代码中检查一下大小是否相同
    • @novice - 我同意。我想过做整个不同大小的事情(在两者上并行运行,直到第一个结束,然后完成另一个),但问题是关于获得数组之间交替的结果 - 这意味着相同的长度。更愿意为所提出的问题提供一个简短连贯的解决方案。
    猜你喜欢
    • 2012-10-26
    • 2018-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-04
    • 1970-01-01
    相关资源
    最近更新 更多