0

だから私はいくつかの文字列と数字を含むこのファイルを持っています、それはスペインのサッカーリーグからのものです:

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() {


    }

関数「void actualitzacioGols(ifstream & f, EquipLliga & e)」に問題があります。最初のスペースを読み取り、それを最初のチーム変数「equipA」に保存し、次に最初の数値を最初の目標変数「golsf」に保存するようにコーディングする方法がわかりません。他の2つ。

これを解決するためのアイデアや役立つヒントはありますか? 私はC ++が初めてです。

4

3 に答える 3

1

delimを使用して文字列を分割する方法を説明しているこの投稿をご覧になることをお勧めします

あなたの場合、スペースを使用して文字列を分割することをお勧めします。フォーマットが固​​定されているため、ファイルが常に同じフォーマットであることが確実な場合は、ハードコードされたインデックスを使用して、ベクトルの要素に配列としてアクセスすることにより、必要な情報 (チームと目標) を取得できます。

于 2013-02-12T16:28:48.690 に答える
0

私はFindSubstrを使用します。

最初のスペースを見つけて、0 からそのスペースまでの部分文字列を取得できます。次に、スペースの後に +1 の数字を取得し、残りの文字列から新しい文字列を作成し、別の名前で同じことを行います。

于 2013-02-12T16:42:30.083 に答える
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

*/
于 2013-06-04T02:45:42.977 に答える