注册 登录
编程论坛 C++教室

按百家姓将姓名排序 怎么用c++编程呀

LindaP 发布于 2011-06-19 13:28, 3655 次点击
  基本要求:
1)要求用C++语言编程,在Visual C++环境下调试完成;
2)要求按照程序功能分成几个功能模块来实现,各个功能模块分别使用函数来完成;
3)要求应用本课所讲授的程序设计语言知识来解决问题
4)使用cin和cout来实现输入输出(使用scanf和printf的为不合格)
为简化程序,只对百家姓的前四个姓“赵、钱、孙、李”进行排序。输入20个人的姓名,他们的姓为这四个姓中的某一个;排序原则:先按百家姓的顺序排序,如果姓相同,再按名的正常汉字顺序排序。例如,程序运行后的结果为:
排序后的姓名为:
赵冬梅
赵国良
赵雪
赵迎专
赵倩
赵璐佳
钱潮
钱川
钱朋钊
钱现冲
钱心
孙君啸
孙巍
孙亚星
李彧
李福德
李杰
李景洋
李荣顺
李彦航
2.    主要关键问题
为实现按“赵、钱、孙、李”顺序排序,可将这四个姓氏对应4个从小到大的整数(可为0,1,2,3或1,2,3,4等,只要是从小到大的整数即可),将输入的姓名中的姓查找到其对应的整数,然后按照这个整数进行排序,当该数相同(姓相同)时,再比较名进行排序。
3.    模块化设计
本程序应采用模块化设计方法,设计几个功能模块。例如(仅供参考):
    输入函数:输入20个人的姓名
    输出函数:输出20个人的姓名
    获取姓的整数:查找姓对应的整数
    排序函数:将20个姓名按规定的原则进行排序
四、创新要求
实现程序功能后,可进行创新设计(3项全部实现为创新):
1)    将姓名数目20改进为用户输入姓名个数n,最大不超过1000。将这n个人的姓名存入一文本文件,利用文件操作,从该文件中读取n个人的姓名
2)    扩展百家姓的数目,将4个姓扩展到100个。
3)    使用多文件,即主函数和各个函数分别存放在不同的.cpp文件中,在头文件中进行函数原型声明。


23 回复
#2
凌晨三点雨2011-06-21 10:11
河工大的吧
#3
凌晨三点雨2011-06-21 10:12
咱俩的一样 呵呵
#4
pangding2011-06-21 18:04
“河工大”的全称是什么?
#5
凌晨三点雨2011-06-21 18:29
   版主你会么?帮个忙吧?   我们学校叫河北工业大学。
#6
新气象2011-06-22 13:42
ha
#7
凌晨三点雨2011-06-22 16:35
版主啊!!!!!!救我一命吧!!!!!!!!!
#8
pangding2011-06-22 17:26
感觉你就按 2,3 里说的方法做呗。提示的比较详细了。

我一开始想的方法和 2 说的还不太一样,不过按 2 那样做也行。
而且那个所谓的创新很容易,只要写的时候考虑一下。实现非创新的和创新的没有什么本质区别。不过那100个姓的确实比较恶心,我觉得弄10几20个意思意思就行了。技术上没什么大区别。


[ 本帖最后由 pangding 于 2011-6-22 17:36 编辑 ]
#9
凌晨三点雨2011-06-23 14:29
  果然这是高手啊!!  我是菜鸟   看不懂。。。。
#10
画个圈圈圈2011-06-23 15:14
版主救命啊,这次编程需要的程序都是我们不会的,看了都晕啊
救我们一群人于水火吧,

[ 本帖最后由 画个圈圈圈 于 2011-6-23 15:25 编辑 ]
#11
Toomj2011-06-23 18:38
这个不是偶写地,在网上看到,给楼主参考:
#include <string>
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;

string first_name[]={"赵","钱","孙","李"};

struct node
{
    int id;
    string name;
    void operator = (const node &a);
    node():id(0),name(""){};
};

void node::operator =(const node &a)
{
    this->id = a.id;
    this->name = a.name;
}



bool cmp(const node &a, const node &b)
{
    if (a.name.substr(0, 2) == b.name.substr(0, 2))
        return a.name < b.name;
    else
        return a.id < b.id;
}

int main()
{
    //freopen("d:\\1.txt", "r",stdin);
    size_t n, i;
    int id;
    string str;
    node names[30];
   
    cout<<"输入多少个姓名?"<<endl;
    cin>>n;
    cout<<"请输入"<<n<<"个姓名"<<endl;

    for (i = 0; i < n; ++i) {
        cin>>str;
        names[i].name = str;
        for (id = 0; id < 4; ++id) {
            if (first_name[id] == str.substr(0, 2)) {
                names[i].id = id;
            }
        }
    }

    /*for (i = 0; i < n; ++i)
        cout<<names[i].name<<" "<<names[i].id<<endl;*/

    sort(names, names + n, cmp);

    for (i = 0; i < n; ++i)
        cout<<names[i].name<<endl;
               
    return 0;
}
#12
pangding2011-06-23 22:02
我看11楼的就行。
#13
新气象2011-06-23 22:45
回复 12楼 pangding
可行吗?
#14
新气象2011-06-24 08:52
回复 11楼 Toomj
哇塞,可以。不错。感谢啊。
#15
回忆q2012-06-26 08:56
我的好像有点问题,求解......
#16
guzenghui2012-06-26 09:02
强大 河工大飘过
#17
guzenghui2012-06-26 09:10
程序可以运行 看不懂呀  真心求解释
#18
PRI2012-06-26 09:43
有我能懂的程序吗  我是大一的 都不会啊
#19
wangfengwu2012-06-26 13:40
其实我就是来找答案的。。
#20
wangfengwu2012-06-26 14:10
回复 17楼 guzenghui
我也不懂啊
#21
guzenghui2012-06-27 09:05
回复 20楼 wangfengwu
到时候 会重的 要改点内容    答辩不好过呀
#22
月色寒影2012-06-27 12:08
我也是河工大,马上大二,真吭啊,我真想挂啊
#23
guzenghui2012-06-27 12:29
听说 答辩 不太好过
#24
PRI2012-06-29 11:25
看不懂啊 谁来解释一下啊
1