匿名使用者
匿名使用者 發問時間: 電腦與網際網路程式設計 · 8 年前

C++ 使用map來分析字串 20點

我想練習c++的 map用法

已有一string str1= "a11a1a2" 由數字和英文(假設只有一種例如 a)組成

我想從這個字串中找到所有1和2的位置,並存起來

例如1出現在第 1 2 4個位置 2出現在第6個位置

想用map<int , int>存成

1 1 1 2

1 2 4 6

這樣像pair的形式

而此處str[1] ='1' 要如何轉成整數呢(atoi無法用)

最後再逐一尋訪並印出來

這樣該怎麼下手呢

已更新項目:

附上我試做的寫法

for(i = 0;i

:: const_iterator map_it;

map_it = mp.begin();

while (map_it!=mp.end()) {

cout<<"index"< first<<"value"< second<

2 個已更新項目:

for(i = 0;i

:: const_iterator map_it;

map_it = mp.begin();

while (map_it!=mp.end()) {

cout<<"index"< first<<"value"< second<

3 個已更新項目:

不知道為什麼一直被切掉= =

我主要想問:if(s1[i] == '1' || s1[i] == '2')

mp.insert(make_pair(i ,(s1[i])-'0') );

這樣的寫法OK嗎 覺得有點冗長

另外 map 用insert進去的值好像會依key自動排序

這是真的嗎

4 個已更新項目:

另外依我這種不需讀近來就已排序的資料

是否可使用vector 會比較妥當嗎?

5 個已更新項目:

因為我要記錄找到1或2的位置

除了用map外

我最後是選用vector > 來做

不過這樣每次加入元素時 還是都要呼叫一個make_pair( )

不知是否會很浪費資源

6 個已更新項目:

又掉字= =

我試選用 vector<pait<int,int> >

1 個解答

評分
  • Tai
    Lv 5
    8 年前
    最佳解答

    #include <iostream>

    #include <string>

    #include <map>

    using namespace std;

    int main(int argc, char* argv[])

    {

    string str1= "a11a1a2";

    map<int, int> m;

    int key = 0;

    for (string::iterator i= str1.begin(); i != str1.end(); ++i) {

    if ((*i) == '1' || (*i) == '2')

    m[key++] = (*i)-'0';

    }

    for (map<int, int>::const_iterator i = m.begin(); i != m.end(); ++i)

    cout << i->second << " ";

    cout << endl;

    }

    * map 是按照 key 排序的, 上文 key 是遞增加入, 所以你看不出什麼變化.

    2013-01-24 19:11:09 補充:

    #include

    vector m;

    for (string::iterator i= str1.begin(); i != str1.end(); ++i) {

    if ((*i) == '1' || (*i) == '2')

    m.push_back((*i)-'0');

    }

    改成這樣就是使用 vector 了. 這也是 STL 漂亮所在, 類似的語法走訪資料.

    2013-01-24 20:40:17 補充:

    改成 vector 的話

    #include

    ....

    vector m;

    for (string::iterator i = str1.begin(); i != str1.end(); ++i)

    if ((*i) == '1' || (*i) == '2')) m.push_back( (*i)-'0' );

    ..

    2013-01-24 20:49:42 補充:

    跟你一樣一直掉字 : (

    # i n c l u d e < v e c t o r >

    # i n c l u d e < m a p >

    這些字都掉了

    2013-01-25 19:55:34 補充:

    ..我最後是選用 < vector > 來做. 不過每次加入元素時 還都要呼叫 make_pair( ) 不知是否會很浪費資源

    回 :

    資料/位置都要記錄, make_pair 不會浪費資源, 比 tree 結構的 map 還省空間

    但你最後目的為何, 如果之後要走遍所有的 1之類的, 不妨練習 multimap

還有問題?馬上發問,尋求解答。