gpt4 book ai didi

c++ - 基于字符串的数组,char列表转换

转载 作者:行者123 更新时间:2023-11-28 01:22:51 24 4
gpt4 key购买 nike

我创建了一个字符串类型的多表。我将变量保存在内部(int,string)。它给我一个错误:

[Error] cannot convert 'std::string {aka std::basic_string}' to 'char' in assignment

我创建了一套树形函数。该程序从具有以下格式的文件创建一个多数组:

11 10 2001
CSKA Moscow
12 1
Bayern Munich
...

程序:

void llegir(std::fstream &_contingut, std::string *_taula) {
//declaro variables
int dia, mes, any, puntsLocal, puntsVisitant, i = 0;
std::string equipLocal, equipVisitant;

while (!(_contingut.eof())) {
//llegeixo arxiu
_contingut >> dia >> mes >> any; //primera linea
_contingut.ignore();
getline(_contingut, equipLocal); //segona linea
_contingut >> puntsLocal >> puntsVisitant; //tercera linea
_contingut.ignore();
getline(_contingut, equipVisitant); //quarta linea


_taula[i][0] = dia;
_taula[i][1] = mes;
_taula[i][2] = any;
_taula[i][3] = equipLocal.c_str();
_taula[i][4] = puntsLocal;
_taula[i][5] = equipVisitant.c_str();
_taula[i][6] = puntsVisitant;

i++;

}

}
void creartaulaDelFitxer(std::string _fitxer, std::string *_taula, int &n_taula) {
std::fstream arxiu;
arxiu.open(_fitxer, std::fstream:: in );

if (arxiu.is_open()) {
std::cout << "existeix";
} else {
std::cout << "ERROR OBERTURA FITXER";
}
llegir(arxiu, _taula);
}
int main(int argc, char** argv) {
std::string fitxer;
std::string eurolliga[300][7];
int n_taula = 0;

std::cout << "INTRODUEIX NOM FITXER:" << std::endl;
std::cin >> fitxer;
creartaulaDelFitxer(fitxer, *eurolliga, int n_taula);
}

最佳答案

您将指针、字符和字符串混合在一起,这肯定会引起很多麻烦。尝试使用标准容器,如 std::stringstd::vector。如果您需要很多字符串,请将它们放在一个 vector 中。当你有一组数据时,比如

11 10 2001
CSKA Moscow
12 1
Bayern Munich

描述一些实体,为它创建一个。然后,您可以为该类添加流运算符以读入这些实体之一。如果您有实体集合,请创建一个容器并为其添加流操作符。

例子:

#include <iostream>
#include <fstream>
#include <vector>

class Game {
std::string equipLocal{};
std::string equipVisitant{};
int dia{}, mes{}, any{};
int puntsLocal{}, puntsVisitant{};

public:
friend std::istream& operator>>(std::istream&, Game&);
friend std::ostream& operator<<(std::ostream&, const Game&);
};

// read one entity from an istream
std::istream& operator>>(std::istream& is, Game& g) {
if(is >> g.dia >> g.mes >> g.any) {
is.ignore();
if(std::getline(is, g.equipLocal) && (is >> g.puntsLocal >> g.puntsVisitant)) {
is.ignore();
std::getline(is, g.equipVisitant);
}
}
return is;
}

// write one entity to an ostream
std::ostream& operator<<(std::ostream& os, const Game& g) {
return os << g.dia << " " << g.mes << " " << g.any << "\n"
<< g.equipLocal << "\n"
<< g.puntsLocal << " " << g.puntsVisitant << "\n"
<< g.equipVisitant << "\n";
}

class EuroLiga {
std::vector<Game> games{};

public:
bool Load(const std::string& filename) {
std::ifstream arxiu(filename);
if(arxiu) {
games.clear();
arxiu >> *this; // use this class' friend, operator>>
return true;
} else
return false;
}

// support for basic non-const iteration over the 'games'
std::vector<Game>::iterator begin() { return games.begin(); }
std::vector<Game>::iterator end() { return games.end(); }

friend std::istream& operator>>(std::istream&, EuroLiga&);
};

// read all entities from an istream
std::istream& operator>>(std::istream& is, EuroLiga& el) {
Game tmp;
while(is >> tmp) {
el.games.push_back(std::move(tmp));
}
return is;
}

int main() {
EuroLiga euroliga;
std::string fitxer;

std::cout << "INTRODUEIX NOM FITXER: ";
std::cin >> fitxer;
euroliga.Load(fitxer);

// display all entities read from the file
for(auto& g : euroliga) {
std::cout << g << "\n";
}
}

关于c++ - 基于字符串的数组,char列表转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55297792/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com