2019/02/22關於上文的題解

從上次的思路,換到容器去碼代碼,真的沒有頭緒,讓人茫然失措,有點無所適從的感覺,看了各路神仙的講解,都不是那麼詳細,有些小的方面沒有提到,很難受,只能看着他們的文章,視頻。一點一點的摸索。
重要的一點 各大網站不認strlwr(),只能用tolower;
或者 transform(strA.begin(), strA.end(), strA.begin(), ::tolower)

今天的知識點
迭代器
類型iterator 名稱 ps:map<string,string>::iterator;
Typef map<char,string> cx; cx::iterator;
Map指向value跟key mp->second mp->first;
輸出迭代器所指向的要用 *p;
結構體插入map mp.insert(make_pair(ax.a,ax.b));

#include<iostream>
#include<cstdio>
#include<cstring>
#include<map>
#include<set>
#include<algorithm>
using namespace std;
struct cx{
string a;			//定義一個結構體,重點不是放什麼,而是爲了對應map容器;
string b;
};
typedef multimap<string,string>dx; //dx代表前面的一長串
dx mp; //上面那一長串的類型的mp
cx ax;	//cx數據類型的ax
char d[30]; 	//爲了轉換大小的過度字符串
set<string> ap;最後排序Value用的容器
int main()
{
    string c;
    while(cin>>c)
    {
        memset(d,0,sizeof(char)*30); //數組清零
        if(c=="#") break;
        ax.b=c;
        for(int i=0;i<c.size();i++)
        {




            d[i]=tolower(c[i]); //換成小寫
        }
        //c=strlwr(d); 
        sort(d,d+c.size());  //將單詞按照字典序排序
        ax.a=d;
        mp.insert(make_pair(ax.a,ax.b));  //插入multimap,a做key,b做value
    }
    dx::iterator p;
    dx::iterator q;
    for(p=mp.begin();p!=mp.end();++p)
    {
        q=++p;
        p--;										//這裏查了相關資料沒有找到可以指向迭代器下一位的方法;
        if(p->first==q->first)
        {
            mp.erase(p->first);		//eraser()函數回去掉所有value等與p->的value;
            p=mp.begin();
        }
    }
    for(p=mp.begin();p!=mp.end();++p)
    {
        ap.insert(p->second);		//將value插入set容器
    }
    for(set<string>::iterator c=ap.begin();c!=ap.end();c++)
    {
        cout<<*c<<endl;		//迭代輸出
    }
    return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章