2014-05-05 47 views
-1

我在google和stackoverflow上搜索了很多,但是我找不到我的答案。我實際上正在閱讀一本C++書(C++ Primer 5th Edition),他們要求我做一個練習。如何計算在列表中相同的字符串發生了多少次

「寫一個程序,讀取幾個交易和計數許多交易如何爲每個ISBN發生」(控制檯項目)

這是我的代碼大氣壓:

Sales_item currentItem, item; 

if (cin >> currentItem) 
{ 
    int cnt = 1; 
    while (cin >> item) 
    { 
     if (currentItem.isbn() == item.isbn()) 
     { 
      ++cnt; 
     } 
     else 
     { 
      cout << currentItem.isbn() << " occurs " << cnt << " times " << endl; 
      cnt = 1; 
      currentItem = item; 
     } 
    } 
cout << item.isbn() << " occurs " << cnt << " times " << endl; 
} 

我不會解釋如何工作交易,所以我會以另一種方式來問它。

我在控制檯輸入6(或更多)的隨機字符串作爲爲例:

101A 
102A 
101A 
101A 
103A 
102A 

我想要的結果的結果(輸出)爲:

101A occurs 3 times. 
102A occurs 2 times. 
103A occurs 1 times. 

,你會怎麼做?

回答

0

工作使用的std ::地圖,而不是名單會更容易。

int main() 
{ 
    map<string,int> stringMap; 

    for (int i=0;i<3;i++) 
    { 
    cout<<"Enter string: "; 
    string s; 
    cin>>s; 
    if(stringMap.find(s)!=stringMap.end()) 
    { 
     stringMap[s]++; 
    } 
    else 
    { 
     stringMap[s]=1; 
    } 

    } 
    for (map<string,int>::const_iterator itr = stringMap.cbegin(); itr!=stringMap.cend(); ++itr) 
    { 
    if(itr->second > 1) 
     cout<<itr->first << " occurs "<<itr->second<<" times"<<endl; 
    else 
     cout<<itr->first << " occurs "<<itr->second<<" time"<<endl; 
    } 


    return 0; 
} 
+0

謝謝!即使我認爲我的書不希望我這樣做,哈哈,這個工作完美無缺。 – user2309631

+0

我認爲一個地圖的例子是古典的,以避免完全unnesessary'find()' – Slava

0

有這樣一個問題有多種方法,所以最好的取決於你的約束。我的做法是:

while(GetInputString(str)) { 
    myStruct* ptr = existingList.Find(str); 
    if (!ptr) { 
    existingList.Add(str); 
    } else { 
    ptr->IncrementCount(); 
    } 
} 

我試過不解決你的問題你 - 希望的答案給你一個模板,...

0
#include <iostream> 
#include <vector> 
#include "Sales_item.h" 

using namespace std; 

void book_transactions(string isbn, int count); 
int main() 
{ 
    vector<Sales_item> book_vec; 

    Sales_item book; 
    int total_transactions = 1; 

    // Reads in Sales_item objects 
    while (cin >> book) 
    { 
     book_vec.push_back(book); 
    } 

    // Compares ISBNs in vector, if two isbns are equal total transactions increases 
    for (int i = 0; i < book_vec.size() - 1; i++) 
    { 
     if (book_vec[i].isbn() == book_vec[i+1].isbn()) 
     { 
      total_transactions = book_vec[i].get_units_sold() + book_vec[i+1].get_units_sold(); 
      book_transactions(book_vec[i].isbn(), total_transactions); 
     } 

    } 
} 

void book_transactions(string isbn, int count) 
{ 
    cout << "ISBN: " << isbn << " " << "Transactions: " << count << endl; 
} 
  • 我走進Sales_item.h類,並添加一個方法來獲得的銷售數量。私有中已經有一個類成員(無符號返回類型)。我剛創建了一個getter,然後創建了一個Sales_items向量。這個解決方案似乎工作。我確定預期的問題不是針對N組sales_items,但是這應該用作「膠帶」解決方案。在這一點上沒有必要玩弄指針。一個簡單的矢量數組和一個比較相鄰對象的算法工作得很好。
相關問題