| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 526 人关注过本帖
标题:帮忙看看啊,谢谢
只看楼主 加入收藏
lianjiecuowu
Rank: 3Rank: 3
来 自:安徽
等 级:论坛游侠
帖 子:152
专家分:107
注 册:2011-5-20
结帖率:85.71%
收藏
已结贴  问题点数:20 回复次数:5 
帮忙看看啊,谢谢
#include<iostream>
#include<vector>
#include<list>
#include<algorithm>
#include<iterator>
#include<string>
using namespace std;
class lei
{
private:
    string str1;
    string str2;
public:
    void set_str1(string s)
    {
        if(!s.empty())
            str1=s;
        else
            str1="";
            
    }
    void set_str2(string s)
            {
        if(!s.empty())
            str2=s;
        else
            str2="";
            
    }
    string get_str1()
    {
        return this->str1;
    }
    void show()
    {
        cout<<str1<<'\t'<<str2<<endl;
    }

};
/*
int main()
{
    list<lei> ls;
    const int N=5;
    string a;
    lei b;
    vector<lei> vec;
    int i;
    for(i=0;i<N;i++)
    {
        cout<<"input string str1"<<endl;
        cin>>a;
        b.set_str1(a);
        cout<<"input string str2"<<endl;
        cin>>a;
        b.set_str2(a);
        vec.push_back(b);
    }
    vector<lei>::iterator it_v=vec.begin();
    vector<lei>::iterator it_end=vec.end();
    for(;it_v!=it_end;++it_v)
    {
        if(!ls.size())
            ls.push_back(*it_v);
        else
        {
            list<lei>::iterator it=ls.begin();
            list<lei>::iterator iter=ls.end();
            list<lei>::iterator it2=ls.end();
            it2--;
            if(it_v->get_str1().c_str()<it->get_str1().c_str())
                ls.push_front(*it_v);
            else if(it_v->get_str1().c_str()>it2->get_str1().c_str())
                ls.push_back(*it_v);
            else
            {
                for(it=ls.begin();it!=iter;++it)
                {
                    if(it_v->get_str1().c_str()<it->get_str1().c_str())
                    {
                        ls.insert(it,*it_v);
                        break;
                    }

                }
            }
        }
    }
    list<lei>::iterator it=ls.begin();
    list<lei>::iterator iter=ls.end();
    for(;it!=iter;++it)
        (*it).show();
    cout<<endl;
    system("pause");
    return 0;
}
*/
int main()
{
    list<lei> ls;
    const int N=5;
    string a;
    lei b;
    vector<lei> vec;
    int i;
    for(i=0;i<N;i++)
    {
        cout<<"input string str1"<<endl;
        cin>>a;
        b.set_str1(a);
        cout<<"input string str2"<<endl;
        cin>>a;
        b.set_str2(a);
        vec.push_back(b);
    }
    vector<lei>::iterator it_v=vec.begin();
    vector<lei>::iterator it_end=vec.end();
    for(;it_v!=it_end;++it_v)
    {
        if(!ls.size())
            ls.push_back(*it_v);
        else
        {
            list<lei>::iterator it=ls.begin();
            list<lei>::iterator iter=ls.end();
            list<lei>::iterator it2=ls.end();
            it2--;
            if(it_v->get_str1()<it->get_str1())
                ls.push_front(*it_v);
            else if(it_v->get_str1()>it2->get_str1())
                ls.push_back(*it_v);
            else
            {
                for(it=ls.begin();it!=iter;++it)
                {
                    if(it_v->get_str1()<it->get_str1())
                    {
                        ls.insert(it,*it_v);
                        break;
                    }

                }
            }
        }
    }
    list<lei>::iterator it=ls.begin();
    list<lei>::iterator iter=ls.end();
    for(;it!=iter;++it)
        (*it).show();
    cout<<endl;
    system("pause");
    return 0;
}


里面有两个main()函数,注释掉的那个是有问题的,输入的字符串无法按照升序的顺序排列输出,而下边的那个则可以,问题是string还要不要转换成char型进行比较,转换成char型,排序输出就是错的,不进行转换直接按string类型比较结果就是正确的
搜索更多相关主题的帖子: void class private include public 
2011-07-01 11:34
yinchaoji2
Rank: 1
等 级:新手上路
帖 子:2
专家分:7
注 册:2011-6-5
收藏
得分:7 
正关注。

编程就是用计算机语言描述世界。
[url=http://www.bccn.net]编程论坛[/url]
2011-07-01 12:05
ToBeStronger
Rank: 4
等 级:业余侠客
帖 子:61
专家分:239
注 册:2011-4-8
收藏
得分:7 
1.string类型能比较大小是因为#include<string>里有写好的string排序,使用<时,就调用默认的operator <;char型怎么比较?这样肯定不对
2.楼主直接在class lei里写个谓词排序,然后ls.sort()直接就完事了...
2011-07-01 12:10
zhongjiezhe
Rank: 2
等 级:论坛游民
帖 子:13
专家分:12
注 册:2011-5-20
收藏
得分:7 
回复 3楼 ToBeStronger
排序可选择按str1排序和str2排序,用sort该怎么处理呢
2011-07-02 16:39
ToBeStronger
Rank: 4
等 级:业余侠客
帖 子:61
专家分:239
注 册:2011-4-8
收藏
得分:0 
回复 4楼 zhongjiezhe
只需要在class lei写一个operator函数,我只需申明一个string变量时str1,然后将str1按照顺序输出
bool operator <(const ContactItem& itemToCompare)const
{
    return(this->str1<itemToCompare.str1);
}
2011-07-02 17:51
zhongjiezhe
Rank: 2
等 级:论坛游民
帖 子:13
专家分:12
注 册:2011-5-20
收藏
得分:0 
回复 5楼 ToBeStronger
谢谢,明白了,以前对c++的认识太表面了,向你学习
2011-07-03 19:47
快速回复:帮忙看看啊,谢谢
数据加载中...
 
   



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

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