【问题标题】:Arrays aren't behaving as I'm expecting数组的行为不像我预期的那样
【发布时间】:2020-03-11 06:22:37
【问题描述】:

指针对我来说仍然有点混乱。我希望 split 函数将数组的负元素复制到一个新数组中,并将正元素复制到另一个新数组中。一个不同的函数打印变量。我已经包含了该功能,但我认为这不是问题。打印数组时,所有元素都为 0:

Enter number of elements: 5   
Enter list:1 -1 2 -2 3
Negative elements:
0 0 
Non-Negative elements:
0 0 0 

我认为问题是在下面的拆分函数中我需要以不同的方式传递参数。我尝试使用 '*' 和 '**'(不带引号)来传递参数,但我收到错误消息,我可能做错了。

void split(int alpha[], int bravo[], int charlie[], int aSize, int bSize, int cSize) {
  int a = 0;
  int b = 0;  
for (int i = 0; i < aSize; ++i) {
  if (alpha[i] < 0) {
    alpha[i] = bravo[a];
    ++a;
  }
  else {
    alpha[i] = charlie[b];
    ++b;
  }   
}
 if (a + b != aSize) {
   cout << "SOMETHING HAS GONE HORRIBLY WRONG!";
   exit(0);
 }
}

我的主函数(所有数组都必须是指针):

int num_elements;
  cin >> num_elements;
  int * arr1 = new int[num_elements];
  int x;
  cout << "Enter list:";
  for (int i = 0; i < num_elements; ++i) {
    cin >> x;
    arr1[i] = x;
  }
  int y = 0;
  int z = 0;
  count(arr1, num_elements, y, z);
  int * negs = new int [y];
  int * nonNegs = new int[z];
  split(arr1, negs, nonNegs, num_elements, y, z);
  cout << "Negative elements:" << endl;
  print_array(negs, y);
  cout << endl;
  cout << "Non-Negative elements:" << endl;
  print_array(nonNegs, z);
  cout << endl;

所有功能:

void count(int A[], int size, int & negatives, int & nonNegatives) {
  for (int i = 0; i < size; ++i) {
    if (A[i] < 0) {
     ++negatives;
    } 
    if (A[i] >= 0) {
     ++nonNegatives;
    }
  }
}

void split(int alpha[], int bravo[], int charlie[], int aSize, int bSize, int cSize) {
  int a = 0;
  int b = 0;  
for (int i = 0; i < aSize; ++i) {
  if (alpha[i] < 0) {
    alpha[i] = bravo[a];
    ++a;
  }
  else {
    alpha[i] = charlie[b];
    ++b;
  }   
}
 if (a + b != aSize) {
   cout << "SOMETHING HAS GONE HORRIBLY WRONG!";
   exit(0);
 }
}


void print_array(int A[], int size) {
  for (int i = 0; i < size; ++i) {
      cout << A[i] << " ";
  }
}

感谢所有帮助。

编辑:对于我不清楚的问题,我深表歉意,我想知道如何让我的数组按照我想要的方式运行。

【问题讨论】:

  • 问题是什么?
  • 省去很多麻烦,始终使用std::arrays 和/或std::vectors 而不是C 样式的数组。
  • 不应该是bravo[a] = alpha[i]而不是相反的吗?
  • 您将bravocharlie 复制到alpha 而不是反向复制。

标签: c++ arrays pointers function-pointers


【解决方案1】:

数组按照指令正确运行:),您在拆分函数中犯了小错误(可能被忽略)。我已经注释掉了语句并给出了问题的原因,请更正这两行代码,剩下的就可以了。

void split(int alpha[], int bravo[], int charlie[], int aSize, int bSize, int cSize) {
  int a = 0;
  int b = 0;  
for (int i = 0; i < aSize; ++i) {
  if (alpha[i] < 0) {
    //alpha[i] = bravo[a];// here alpha is your source array, don't overwrite it
    bravo[a] = alpha[i];
    ++a;
  }
  else {
    //alpha[i] = charlie[b];// here alpha is your source array, don't overwrite it
    charlie[b] = alpha[i];
    ++b;
  }   
}
 if (a + b != aSize) {
   cout << "SOMETHING HAS GONE HORRIBLY WRONG!";
   exit(0);
 }
}

【讨论】:

    猜你喜欢
    • 2021-12-10
    • 1970-01-01
    • 2016-01-28
    • 2018-12-15
    • 1970-01-01
    • 2017-04-11
    • 1970-01-01
    • 2016-12-04
    • 1970-01-01
    相关资源
    最近更新 更多