【问题标题】:Create a third vector by alternating an element of the first and second vector通过交替第一个和第二个向量的元素创建第三个向量
【发布时间】:2020-10-09 03:53:32
【问题描述】:

在我的问题中,我有两个向量,例如:

v1[4] = {1, 2, 3, 4};
v2[4] = {5, 6, 7, 8};

我应该像这样创建第三个向量:v3 = {1,5,2,6,3,7,4,8}。 向量的大小也可以不同。

int main () {
int n1, n2, i, j;
printf("elementi primo vettore: "); //number of elements first vect
scanf("%d", &n1);

printf("elementi secondo vettore: "); //number of elements second vect
scanf("%d", &n2);

int *vett1 = (int *)malloc(n1 * sizeof(int));
int *vett2 = (int *)malloc(n2 * sizeof(int)); 
int *vett3 = (int *)malloc((n1 + n2) * sizeof(int));

for(i = 0; i < n1; i++) {
    printf("primo vettore %d->", i);
    scanf("%d", &vett1[i]);
}

for(i = 0; i < n2; i++) {
    printf("secondo vettore %d->", i);
    scanf("%d", &vett2[i]);
}

int a = 0;
for(i = 0, j = 0; i < n1, j < n2; i++, j++) {
    if(i < n1) {
        vett3[a] = vett1[i];
        a++;
    }
    if(j < n2) {
        vett3[a] = vett2[j];
        a++;
    }
 }
}

但它只有在向量具有相同大小时才有效,为什么?

【问题讨论】:

  • i &lt; n1, j &lt; n2j &lt; n2 含义相同。
  • v2[2]int v2[4] 的错字吗?它有四个初始化程序。目前尚不清楚您要在第三个向量中放置什么。如果它是顺序的第一个和第二个向量,一个简单的方法是有两个循环。复制一个向量,然后复制另一个。
  • @WeatherVane 书写错误,抱歉

标签: c vector


【解决方案1】:

逗号运算符丢弃此循环中的第一个表达式 (i &lt; n1):

for(i = 0, j = 0; i < n1, j < n2; i++, j++) {

因此你循环n2 次。

我将改用while 循环:

int a = 0;
i = 0, j = 0;

while ((i < n1) || (j < n2))
{
    if (i < n1)
    {
        vett3[a++] = vett1[i++];
    }
    if (j < n2)
    {
        vett3[a++] = vett2[j++];
    }
}

【讨论】:

    猜你喜欢
    • 2015-06-30
    • 1970-01-01
    • 1970-01-01
    • 2019-11-06
    • 1970-01-01
    • 2019-05-10
    • 1970-01-01
    • 2021-03-24
    • 1970-01-01
    相关资源
    最近更新 更多