【发布时间】:2018-02-08 17:30:16
【问题描述】:
我正在为我的 C++ 类编写一个程序,它接受用户输入的 int 和 char 数组的大小,用随机值(数字 0-100,字母 AZ)填充数组,然后排序、反转和显示两个数组。
该程序在大多数情况下都可以正常工作,并且我理解我在这里使用的逻辑,但是...
多次运行和调试代码后。我注意到,当数组填充值时,第一个元素,即使它实际上被赋予了一个值,它也不会以升序打印分配的值,而是以降序打印?我完全不明白。
注意:我必须使用模板函数对数组进行排序、反转和显示。
template <class T>
void sort(T *arr, int a) {
T temp;
for (int i = 0; i < a; i++) {
for (int j = a; j > 0; j--) {
if (arr[i] > arr[j]) {
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
}
template <class T>
void reverse(T *arr, int a) {
T temp;
for (int i = 0; i < a / 2; i++) {
temp = arr[i];
arr[i] = arr[a - i];
arr[a - i] = temp;
}
}
template <class T>
void display(T *arr, int a) {
for (int i = 0; i < a; i++) {
cout << arr[i] << ", ";
}
cout << endl;
}
template<class T>
void save(T *arr, int a) {
sort(arr, a);
display(arr, a);
reverse(arr, a);
display(arr, a);
}
int main() {
int x, y;
cout << "Please enter a number for an array of data type \"int\"" << endl;
cin >> x;
cout << "Please enter a number for an array of data type \"char\"" << endl;
cin >> y;
int *arr1 = new int[x];
char *arr2 = new char[y];
for (int i = 0; i < x; i++)
cout << (arr1[i] = rand() % 100 + 1);
srand(time(nullptr));
for (int i = 0; i < y; i++)
cout << (arr2[i] = rand() % 26 + 65);
system("cls");
save(arr1, x);
save(arr2, y);
delete[]arr1;
delete[]arr2;
system("pause");
return 0;
}
【问题讨论】:
-
因为这只是一个简短的作业,所以不会太激烈,但对于未来,请避免
using namespace std;system("cls")system("pause") -
@Folling My Prof 让我们使用“using namespace std;”为什么这是个坏主意?
-
如果你想要一个动态数组,使用std::vector。
-
为什么在调用
rand之后有srand(time(null))而之前没有?另外,那种(应该是那种,对吧?)有点奇怪,你不是说for(int j = i + 1 ; j < a ; ++j)吗?
标签: c++ function templates printing dynamic-arrays