2013-02-12 90 views
0

所以我有這個文件,它有一些字符串和數字,它從西班牙足球甲級聯賽是:從文件讀取字符串,並在C++不同的變量保存的不同部分

Malaga 1 Levante 1 
Malaga 1 Osasuna 1 
Osasuna 1 Deportivo 1 
Osasuna 1 Madrid 2 
Osasuna 1 Levante 1 
Osasuna 1 Malaga 1 
# 

好吧,我有什麼要做的就是閱讀這些內容,然後用5個不同的變量保存不同的球隊(馬拉加,萊萬特,奧薩蘇納,拉科魯尼亞和馬德里),還必須將他們在一個變量中爲每個球隊所取得的目標以及他們在另一個球隊中得到的目標爲每個團隊。 這裏是我的代碼:

#include<iostream> 
#include<fstream> 
#include<string> 
using namespace std; 
const char FI='#'; 
const int MAX_EQUIPS=20; 


struct Equip { 
    string nomEquip; 
    int golsf; 
    int golsc; 
    int punts; 
}; 

typedef Equip TaulaEquip[MAX_EQUIPS]; 

struct EquipLliga { 
    TaulaEquip t; 
    int n; 
}; 
int cercaEquip(EquipLliga l, string equip) { 
// Pre: -- 
// Post: si equip no hi es a d.t, retorna -1 
//  altrament retorna posicio de l'equip de nom equip a d.t 
    int ret=l.n-1; 
    bool trobat= false; 
    while (ret>=0 and not trobat) { 
     if (l.t[ret].nomEquip.compare(equip)==0) trobat= true; 
     else ret--; 
    } 
    return ret; 
} 
void llegir(ifstream & f) { 

    string string1; 
    f.open("Lliga.txt"); 
    char output; 
    if (f.is_open()) { 
     while (!f.eof()) { 
      getline(f,string1); 
      cout << string1 << endl; 
     } 
    } 
    f.close(); 
} 
void actualitzacioGols(ifstream & f, EquipLliga & e) { 
// Pre: f obert 
// Post: ha llegit totes les dades de f, incorporat altes i traspasos a al, i els 
//  ingresos i despeses dels equips per altes, baixes i traspasos a d 
    char tipus; 

string equipA, equipB; 
int golsf=0, golsc=0, cerca; 
e.n=0; 
f >> tipus; 

while (tipus!=FI) { // per cada equip 
    cerca=cercaEquip(e,equipA); 
    if (cerca=-1) 
    { 
     e[n].e.nomEquip=equipA; 
     e[n].e.golsf=l[n].e.golsf+golsA; 
     e[n].e.golsf=l[n].e.golsf+golsB; 
    } 
    else 
    { 
     e[cerca].e.golsf=l[cerca].e.golsf+golsA; 
     e[cerca].e.golsc=l[cerca].e.golsc+golsB; 
    } 
    lliga.n++; 
    cerca=cercaEquip(e,equipB); 
    if (cerca=-1) 
    { 
     e[n].e.nomEquip=equipB; 
     e[n].e.golsf=l[n].e.golsf+golsA; 
     e[n].e.golsf=l[n].e.golsf+golsB; 
    } 
    else 
    { 
     e[cerca].e.golsf=l[cerca].e.golsf+golsA; 
     e[cerca].e.golsc=l[cerca].e.golsc+golsB; 
    } 

} 
int main() { 


    } 

我在使用功能的問題 '無效actualitzacioGols(ifstream的&樓EquipLliga & E)'。我不知道如何對它進行編碼,以便它讀取到第一個空格,然後將其保存到第一個團隊變量'equipA',然後將第一個數字保存到第一個目標變量'golsf'中,並與另外兩個。

任何想法或有用的提示來解決這個問題? 我對C++很陌生。

+1

如果是C++,不要將其標記爲C. C程序員可能不會能夠幫助您使用C++。 – netcoder 2013-02-12 15:44:37

+0

哎呀我以爲它會在C中一樣,對不起; p! – 2013-02-12 15:53:22

+0

是您提前知道的球隊名稱? – 2013-06-04 02:57:32

回答

1

我建議你看看這篇文章解釋how to split a string using a delim

在你的情況,你可能想使用一個空間來分割你的字符串。既然你有一個固定的格式,你可以通過訪問矢量元素作爲一個數組,使用硬編碼索引來檢索你想要的信息(團隊和目標),如果你確定你的文件總是具有相同的格式。

0

我會使用FindSubstr

你可以找到的第一個空間,然後從0獲得子到那個空間。然後獲得空格後+1的數字,然後從其餘字符串中創建一個新字符串,並使用其他名稱執行相同的操作。

0

這是您的問題的完整解決方案。希望能幫助到你!

#include <iostream> 
#include <iomanip> 
#include <string> 
#include <map> 
#include <algorithm> 

using namespace std; 
#define WIDTH 10 

int main() 
{ 
    string team1, team2; 
    int team1goals, team2goals; 

    // Data structure for storing Team name and scores 
    map<string, pair<int, int>> scores; 

    while (cin >> team1 >> team1goals >> team2 >> team2goals) { 
      scores[team1].first += team1goals; 
      scores[team2].second += team1goals; 

      scores[team2].first += team2goals; 
      scores[team1].second += team2goals; 
    } 

    cout << endl << setw (WIDTH) << "Team Name" << setw(WIDTH) << "given" << setw(WIDTH) << "received"; 
    for_each(begin(scores), end(scores), [&](pair<string, pair<int,int>> i) { 
     cout << endl << setw(WIDTH) << i.first << setw(WIDTH) << i.second.first << setw(WIDTH) << i.second.first; 
    }); 

    return 0; 
} 

繼承人的結果

/* 
input file: inputFile.txt 
------------------------------- 
Malaga 1 Levante 1 
Malaga 1 Osasuna 1 
Osasuna 1 Deportivo 1 
Osasuna 1 Madrid 2 
Osasuna 1 Levante 1 
Osasuna 1 Malaga 1 
------------------------------- 

runs as: 
yourexename < inputFile.txt 
------------------------------- 
output: 

Team Name  given received 
Deportivo   1   1 
    Levante   2   2 
    Madrid   2   2 
    Malaga   3   3 
    Osasuna   5   5 

*/ 
相關問題