使用 swap 按字母顺序排列字符串数组

Posted

技术标签:

【中文标题】使用 swap 按字母顺序排列字符串数组【英文标题】:Using swap to arrange a string array in alphabetical order 【发布时间】:2013-02-14 03:46:05 【问题描述】:

我正在为我的编程课做一个作业:实施课堂上讨论的平均成绩计划。成绩信息将在一个输入文件中,其中每个学生的信息分布在两行中:第一行是格式为 Firstname Middlename Lastname 的学生姓名,第二行是学生的成绩,它们是整数。 (一个学生可能没有中间名。)最多有 20 名学生,每个学生有 10 个年级。程序应该向用户请求输入文件的名称。对于每个学生,计算他们的总体平均值(假设每个作业的分数相同)。将信息输出到屏幕上,每个学生一行,每行是他们的“姓名”(在姓氏、名字中间名首字母、10 个成绩和平均值中,按姓氏排序。平均值应保留小数点后两位)正在显示(即 3.1 将输出为 3.10)。您应该使用三个数组来解决所讨论的这个问题并使用一组合理的函数。这就是我目前所拥有的。

#include <iostream>
#include <string>
#include <fstream>
#include <climits>
#include <iomanip>

using namespace std;

const int NGrades= 10;
const int maxStudents=20;

string reformat(string& s);

int main()

int num_of_students = 0;
string fullName;
double sum=0;

string names[maxStudents];
int grades[maxStudents][NGrades];
double average[maxStudents];

string fileName;
ifstream inputFile;

cout<< "Please type the file name including extension(such as .txt)."<<endl;
cout<< "If your file is in a different directory please specify the path:"; //asking          user for file name. seperated into two cout statments for readibility
getline(cin,fileName);
inputFile.open(fileName.c_str());

if (!inputFile)                                   //produce an error if the file name is invalid
 cout<<"Cannot open "<<fileName<<"."<<endl;
 return 1;


while(getline(inputFile, fullName))
    names[num_of_students]=reformat(fullName);
    cout << setw(20)<< names[num_of_students]<<" "<< setw(20);
    for (int i = 0; i < NGrades; ++i)
        inputFile >> grades[num_of_students][i];
        cout <<setw(4)<<grades[num_of_students][i];
        sum = sum + grades[num_of_students][i];
    
    average[num_of_students]= sum/NGrades;
    sum=0;
    cout <<setw(15);
    cout<< fixed << showpoint;
    cout << setprecision(2);
    cout <<average[num_of_students]<< endl;
    inputFile.ignore(INT_MAX, '\n');
    ++num_of_students;
 

 inputFile.close();

 return 0;
 
 string reformat(string& s)
    int pos, posTwo;
    string first_Middle;
    string lastname;
    string finished;
    pos = s.find_first_of(' ');
    first_Middle=s.substr(0,pos+2);
    posTwo=s.find_first_of(' ', pos+1);
    lastname=s.substr(posTwo+1);
    finished=lastname+ ", "+first_Middle;
    return finished;
 

我现在需要做的是使用交换按姓氏的字母顺序排列名称。我不允许使用结构或类似的东西。

【问题讨论】:

使用交换实际上是作业的一部分吗?你确定你的意思不是 std::sort 吗? 【参考方案1】:

首先阅读以下内容: http://en.wikipedia.org/wiki/Selection_sort

您应该将所有数据存储在三个数组容器中;然后,使用排序算法,您的程序应该正确打印输出。

提出更具体的问题,例如如何比较字符串。如果有人重写你的代码,你就不会获得知识。

【讨论】:

以上是关于使用 swap 按字母顺序排列字符串数组的主要内容,如果未能解决你的问题,请参考以下文章

2021-09-25:给定一个字符串数组,将字母异位词组合在一起。可以按任意顺序返回结果列表。字母异位词指字母相同,但排列不同的字符串。示例 1:输入: strs = [“eat“, “tea“, “

使用冒泡排序对Java中的名称数组按字母顺序排序

Java数组问题<现在有一组无序字符序列: a、c、u、b、e、p、f、z.按字母顺序进行升序排列。

按字母顺序排列单词

带有名称和描述 numberOfRowsInSection 问题的按字母顺序排列的 plist

按字母顺序排列的名称和描述列表