| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 943 人关注过本帖
标题:为实现按“赵、钱、孙、李”顺序排序,可将这四个姓氏对应4个从小到大的整数 ...
取消只看楼主 加入收藏
中华鲟的泪
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2012-6-25
结帖率:0
收藏
已结贴  问题点数:20 回复次数:3 
为实现按“赵、钱、孙、李”顺序排序,可将这四个姓氏对应4个从小到大的整数,将输入的姓名中的姓查找到其对应的整数,按照这个整数进行排序;当该数相同时,再比较名进行
#include
#include
#include
#include
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;
 /*读入数据 赵钱孙李姓氏的,设置id为0,1,2,3*/
 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;
}
绿色部分看不懂??谁来解释一下??
 
 
搜索更多相关主题的帖子: include return 姓名 
2012-06-26 14:29
中华鲟的泪
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2012-6-25
收藏
得分:0 
#include <string>
#include <iostream>
#include <algorithm>
#include <vector>
前面是这个,粘贴的时候少了。好多代码都没学过。希望有人帮忙解释一下。。非常感谢
#include <algorithm>
#include <vector>
这两个头文件就不知道是什么意思。也不知道去哪学。帮帮忙呀

[ 本帖最后由 中华鲟的泪 于 2012-6-26 14:44 编辑 ]
2012-06-26 14:42
中华鲟的泪
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2012-6-25
收藏
得分:0 
回复 3楼 lonmaor
这个都是c++的吗??里面不含c语言吧?
2012-06-27 14:06
中华鲟的泪
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2012-6-25
收藏
得分:0 
void Sort(string * str,int n)
 {
 int i=0,j=0,k=0;
 string temp;
 for(i=0;i<n-1;i++)
  {
  k=i;
  for(j=i+1;j<n;j++)
   if(str[k]>str[j])
    k=j;
  if(k!=i)
   {
   temp=str[k];
   str[k]=str[i];
   str[i]=temp;
   }
  }
 for(i=0;i<n-1;i++)
  {
  k=i;
  for(j=i+1;j<n;j++)
   if(analyze(str[k].substr(0,2))>analyze(str[j].substr(0,2)))
    k=j;
  if(k!=i)
   {
   temp=str[k];
   str[k]=str[i];
   str[i]=temp;
   }
  }
 }
string::size_type analyze(string str)
 {
 string name="赵钱孙李周吴郑王冯陈楚魏蒋沈韩杨朱秦尤许";
 return name.find(str,0)/2+1;
 }
 
 
这段代码有点问题。。按姓排名运行可以,但是当姓相同时,排序就乱了。。可以帮忙改改吧?
2012-06-27 21:01
快速回复:为实现按“赵、钱、孙、李”顺序排序,可将这四个姓氏对应4个从小到大 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017888 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved