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

请高手帮忙看下这个程序,哪里出错了啊????谢谢

crazyer1986 发布于 2011-03-03 22:15, 446 次点击

我想显示剩下的没有删除的作者名字和作品,以一个作者名字跟着一个作品的形式显示,可是下面的程序只显示作者名字,作品却显示不出来,请高手帮忙,在此谢过。
#include <iostream>
#include <map>
#include <string>
#include <vector>
using namespace std;

int main()
{
    map<string,vector<string> > authors;
    string author,works,searchItem;
do
{
    cout<<"Enter author name (Ctrl+Z to end):"<<endl;
    cin>>author;
    if(!cin)
        break;
    vector<string> work;
    cout<<"Enter suthor's works(ctrl+z to end):"<<endl;
    while (cin>>works)
        authors.insert (make_pair(author,work));
    cin.clear ();
}while (cin);
cin.clear();
cout<<"Who is the author that you want erase:"<<endl;
cin>>searchItem;
map<string,vector<string> >::iterator iter=authors.find(searchItem);
if(iter==authors.end())

    cout<<"Can't find this author"<<endl;

else
    authors.erase(searchItem);

    cout<<"author\t\twork:"<<endl;
    for(iter=authors.begin();iter!=authors.end();++iter)        
        for(vector<string>::iterator vect=iter->second.begin(); vect!=iter->second.end();vect++)  
        cout<<iter->first<<"\t\t"<<*vect<<endl;
    return 0;
}
7 回复
#2
qq10235692232011-03-04 09:01
什么东西写的?正则表达式么?看不懂!
#3
ciweitou1632011-03-04 11:05
程序代码:

#include <iostream>
#include <map>
#include <string>
#include <vector>
using namespace std;

int main()
{
    map<string,string > authors;
    string author,works,searchItem;
    do
    {
        cout<<"Enter author name (Ctrl+Z to end):"<<endl;
        cin>>author;
        if(!cin)
            break;
        //vector<string> work;
        cout<<"Enter suthor's works(ctrl+z to end):"<<endl;
        cin>>works;
        authors.insert (make_pair(author,works));
        //cin.clear ();
    }while (cin);

    cin.clear();
    cout<<"Who is the author that you want erase:"<<endl;

    cin>>searchItem;

    map<string,string >::iterator iter=authors.find(searchItem);
    if(iter==authors.end())

        cout<<"Can't find this author"<<endl;

    else
        authors.erase(searchItem);

    cout<<"author\t\twork:"<<endl;
    for(iter=authors.begin();iter!=authors.end();++iter)        
        //for(vector<string>::iterator vect=iter->second.begin(); vect!=iter->second.end();vect++)  
        cout<<iter->first<<"\t\t"<<iter->second<<endl;
    return 0;
}
#4
crazyer19862011-03-04 14:05
回复 3楼 ciweitou163
谢谢您的程序,实现了一个作者跟着一个作品的效果,如果我想实现一个作者有多不作品的话,也就是说map容器的值是vector容器,在原来程序的基础上应该如何实现输出呢?还请不吝赐教。
输出形式例如:
路遥        平凡的世界
路遥        人生
路遥        落叶在秋风中飘落
请指教,谢谢。
#5
crazyer19862011-03-04 14:17
回复 2楼 qq1023569223
自己在C++ Primer中看到的一个程序题,改了一下,呵呵
#6
玩出来的代码2011-03-04 14:46
while (cin>>works)
        authors.insert (make_pair(author,work));    // 在你原先的程序上改一句authors[author].push_back(works); OK.
#7
crazyer19862011-03-04 15:04
回复 6楼 玩出来的代码
不胜感激,问题解决了,多谢赐教。呵呵
#8
ciweitou1632011-03-04 15:27
while (cin>>works)
        authors.insert (make_pair(author,work));

没有把works添加到work中。
1