#include <string.h>
#include "BubbleSort.h"
void BubbleSort(char Str[])
{
int i;
int NumElements;
bool Sorted;
char Temp;
NumElements = strlen(Str);
do {
Sorted = true;
NumElements--;
for (i = 0; i < NumElements; i++)
if (Str[i] > Str[i + 1])
{
Temp = Str[i];
Str[i] = Str[i + 1];
Str[i + 1] = Temp;
Sorted = false;
}
} while (!Sorted);
}
/////////////////////////////////////////////
#include <iostream>
#include "Bubblesort.h"
using namespace std;
void main() {
int Num;
char Array[20];
cout << "How many numbers would you like to enter?" << endl;
cin >> Num;
cout << "Enter your numbers:" << endl;
for (int i = 0; i < Num; i++)
{
cin >> Array[i];
}
cout << "Here are the numbers you entered:" << endl;
for (int i = 0; i < Num; i++)
{
cout << Array[i] << " ";
}
cout << endl << endl;
BubbleSort (Array);
cout << "Here are your sorted numbers:" << endl;
for (int i = 0; i < Num; i++)
{
cout << Array[i] << " ";
}
cout << endl;
}
////////////////////////////////////////////////////////
#ifndef BUBBLE_SORT_H
#define BUBBLE_SORT_H
void BubbleSort(char[]);
#endif
我收到运行时错误,指出Num已损坏。任何人都可以帮助查明我的代码中的问题吗?
由于
答案 0 :(得分:0)
char Array[20]
当您输入的Num
大于20时,它会损坏。
更好地使用vector
和push_back
答案 1 :(得分:0)
一个错误是您在char数组上调用strlen
,该数组不能保证以NULL结尾:
NumElements = strlen(Str);
因此NumElements
具有未确定的值。
您需要:
1)传递要作为参数排序的实际字符数,以及数组并删除对strlen
的调用:
BubbleSort(Array, Num);
//...
void BubbleSort(char Str[], int NumElements)
或
2)确保您传递的char数组为空终止