我正在尝试在Xcode上编写一个函数,它以非递增的顺序组合了两个非增加的字符串数组,但每当我尝试编译时,我都会遇到此错误。我很新,不知道为什么会这样。感谢任何帮助。谢谢。
#include <iostream>
#include <string>
using namespace std;
int merge(const string a1[], int size1, const string a2[], int size2, string
result[], int size){
int index1 = 0, index2 = 0;
for (int i = 0; i < size1+size2; i++) {
if (a1[index1] > a2[index2]) {
result[i] = a1[index1];
index1++;
} else {
result[i] = a2[index2];
index2++;
}
}
return size1 + size2;
}
int main() {
string a[4] = {"fgh", "ccc", "abc", "aaa"};
string b[3] = {"pqr", "def", "bcd"};
string z[30];
merge (a, 4, b, 3, z, 30);
for (int i = 0; i < 7; i++)
cout << z[i] << ", ";
return 0;
}
答案 0 :(得分:0)
虽然我没有执行该程序,但看起来你的逻辑是错误的。 如果a1 [index1]总是小于a2 [index2],那么你将继续增加index2,甚至超过size2。当你试图比较“abc”和“bcd”时,我猜这就是你的情况,这里index2会增加到3,而且没有a2 [3]。 请调试你的程序。
答案 1 :(得分:0)
合并功能中的逻辑错误。此外,merge
是一个根据函数定义返回integer data
的函数。但是在main函数中,它看起来像是一个返回void
的函数。
你得到的运行时错误,因为当a2 [index2]试图访问无效的a2 [4]时!
因此,请使用以下代码段替换代码。
#include <iostream>
#include <string>
using namespace std;
int merge(const string a1[], int size1, const string a2[], int size2, string
result[], int size){
int index1 = 0, index2 = 0;
for (int i = 0; i < size1+size2; i++) {
if (a1[index1] > a2[index2]) {
result[i] = a1[index1];
index1++;
}
else {
result[i] = a2[index2];
index2++;
}
}
return size1 + size2;
}
int main() {
int res;
string a[4] = { "fgh", "ccc", "abc", "aaa" };
string b[4] = { "pqr", "def", "bcd" };
string z[30];
res = merge(a, 4, b, 3, z, 30);
for (int i = 0; i < 7; i++)
cout << z[i] << ", ";
return 0;
}
我希望它现在能正常运作!