C++ 为什么名称在我的数组中重复,如何获得要排序的txt文件
输入测试的分数和名称后,输出将创建 重复名字,例如,我输入埃里克,德里克,约翰,迪克 输出可能是erick,derick,derick,derick 我也不知道我将如何修改这个程序来打开一个txt文件 对数据进行排序C++ 为什么名称在我的数组中重复,如何获得要排序的txt文件,c++,arrays,sorting,visual-c++,C++,Arrays,Sorting,Visual C++,输入测试的分数和名称后,输出将创建 重复名字,例如,我输入埃里克,德里克,约翰,迪克 输出可能是erick,derick,derick,derick 我也不知道我将如何修改这个程序来打开一个txt文件 对数据进行排序 // main.cpp // Program 9.4 #include <iostream> #include<string> using namespace std; void sortScore
// main.cpp
// Program 9.4
#include <iostream>
#include<string>
using namespace std;
void sortScore(int *, int, string*);
int main()
{
int numberOfStudents;
cout << "Enter the number of students: " << endl;
cin >> numberOfStudents;
int* score = new int[numberOfStudents];
string* nameOfStudent = new string[numberOfStudents];
for (int i = 0; i<numberOfStudents; i++)
{
cout << "\nEnter Student " << i + 1 << "'s name: " << endl;
cin >> nameOfStudent[i];
cout << "\nEnter his/her score: " << endl;
cin >> score[i];
}
sortScore(score, numberOfStudents, nameOfStudent);
cout << "\nStudent Scores organized from lowest to highest:" << endl;
for (int i = 0; i<numberOfStudents; i++)
{
cout << "\n" << nameOfStudent[i] << "\t\t" << score[i];
}
cout << endl;
delete[] score;
score = 0;
system("pause");
return 0;
}
void sortScore(int *score, int size, string* name)
{
int startScan, minIndex;
int minValue;
string minName;
for (startScan = 0; startScan<(size - 1); startScan++)
{
minIndex = startScan;
minValue = score[startScan];
for (int index = startScan + 1; index<size; index++)
{
if (score[index]<minValue)
{
minValue = score[index];
minIndex = index;
minName = name[index];
}
}
score[minIndex] = score[startScan];
score[startScan] = minValue;
name[minIndex] = name[startScan];
name[startScan] = minName;
}
}
//main.cpp
//方案9.4
#包括
#包括
使用名称空间std;
void-sortScore(int*,int,string*);
int main()
{
国际学生人数;
不能对学生进行分类;
整数*分数=新整数[学生人数];
string*nameOfStudent=新字符串[numberOfStudents];
对于(int i=0;i您在这里有一个逻辑错误,当不需要交换时,您实际上是在用错误的信息交换(丢失minName)
试试这个:
for (startScan = 0; startScan<(size - 1); startScan++)
{
minIndex = startScan;
minValue = score[startScan];
for (int index = startScan + 1; index<size; index++)
{
if (score[index]<minValue)
{
minValue = score[index];
minIndex = index;
minName = name[index];
}
}
if(minIndex != startScan) {
score[minIndex] = score[startScan];
score[startScan] = minValue;
name[minIndex] = name[startScan];
name[startScan] = minName;
}
}
用于(startScan=0;startScan建议在原始指针上使用std::vector
。我发现您忘记了释放nameOfStudent
的内存。我还建议将名称和分数合并到一个数据结构中,然后跟踪一个动态数组,而不是两个。不行。谢谢!!!,这是我正在寻找的,我只是c。)我不明白,如果这不是一个大麻烦,我该如何打开文本文件中的信息您可以将文本信息读取到数组中,并使用ifstream对其进行排序。如果您有问题,请发布您的代码和文本文件的示例数据,以便人们能够提供帮助。
for (startScan = 0; startScan<(size - 1); startScan++)
{
minIndex = startScan;
minValue = score[startScan];
minName = name[startScan];
for (int index = startScan + 1; index<size; index++)
{
if (score[index]<minValue)
{
minValue = score[index];
minIndex = index;
minName = name[index];
}
}
score[minIndex] = score[startScan];
score[startScan] = minValue;
name[minIndex] = name[startScan];
name[startScan] = minName;
}