为啥名称在我的数组中重复,我将如何获得一个 txt 文件进行排序
Posted
技术标签:
【中文标题】为啥名称在我的数组中重复,我将如何获得一个 txt 文件进行排序【英文标题】:Why are the name repeating in my array, and how would i get a txt file to sort为什么名称在我的数组中重复,我将如何获得一个 txt 文件进行排序 【发布时间】:2015-05-11 00:19:48 【问题描述】:在我为测试输入分数和名称后,输出将创建 重复的名字,例如。我输入埃里克,德里克,约翰,迪克
输出可能是 erick , derick, derick, derick
我也不确定如何修改这个程序来打开一个 txt 文件 数据排序?
// 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;
【问题讨论】:
我建议在原始指针上使用std::vector
。我看到你忘记释放nameOfStudent
的内存了。我还建议将名称和分数组合成一个数据结构,然后跟踪一个动态数组而不是两个。
不能reproduce。
【参考方案1】:
你在这里有一个逻辑错误,当不需要交换时,你实际上是在交换错误的信息(丢失了 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;
或者你必须携带 minName:
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;
【讨论】:
谢谢!!!,这就是我要找的东西,我就是想不通,如果不是很麻烦,我将如何从一个文本文件 您可以将文本信息读取到数组并使用 ifstream 对其进行排序。如果您有问题,请发布您的代码和文本文件的示例数据,以便人们提供帮助。以上是关于为啥名称在我的数组中重复,我将如何获得一个 txt 文件进行排序的主要内容,如果未能解决你的问题,请参考以下文章