2016-08-22 2 views
-1
Bulbasaur|Grass| |2|16|45|65|65|45|0.059 
Ivysaur|Grass|Poison|3|32|60|80|80|60|0.059 
Venusaur|Grass|Poison| | |80|100|100|80|0.059 
Torchic|Fire| |23|16|45|70|50|45|0.045 
Combusken|Fire|Fighting|24|36|60|85|60|55|0.045 
Blaziken|Fire|Fighting| | |80|110|70|80|0.045 

Вот некоторые данные в моем текстовом файле, который хранит имя покемона, тип 1, тип 2, индекс числа эволюционировали покемонов из списка , и stats, с символом "|" как разделительные линии, как я могу прочитать все сотни подобных данных в 2D-массив? Или любая другая форма массива, которая дает лучший результат?C++ Чтение символов, целых чисел и удваивается с делением строки из текстового файла в 2D массив

Это мои коды на C++, и результат полностью сбой.

ifstream inFile; 
inFile.open("PokemonBaseStats.txt"); 
if (inFile.fail()) 
{ 
    cerr << "Could not find file" << endl; 
} 

vector<string> code; 
string S; 

while (inFile >> S) { 
    code.push_back(S); 

    inFile >> name >> type1 >> type2 >> evolveTo >> evolveLevel >> hp >> atk >> def >> spd >> catchRate; 
    cout << name << type1 << type2 << evolveTo << evolveLevel << hp << atk << def << spd << catchRate; 
} 
system("PAUSE"); 
return 0; 

Выход: -

output

+0

Что вы пробовали до сих пор? Вы проверили документацию для 'find_first_of' и' find_first_not_of'? –

+0

Помогает ли это? http://stackoverflow.com/questions/7302996/changing-the-delimiter-for-cin-c –

+0

Я бы выбрал это предприятие лучше ... –

ответ

1

я написал кусок кода, чтобы сделать это, но я не уверен, если это именно то, что вы хотите:

 struct Pokemon 
     { 
     public: 
      std::string Name; 
      std::string Type1; 
      std::string Type2; 
      int IdxVector[6]; 
      float Stat; 
     }; 

     int main(int argc, char *argv[]) 
     { 
      std::string TxtLine; 
      int count; 
      std::ifstream F("./TextFile.txt"); 

      std::list<Pokemon> PList; 

      while(std::getline(F,TxtLine)) 
      { 
       Pokemon P; 

       int idx=TxtLine.find_first_of('|'); 
       std::string Element=TxtLine.substr(0,idx); 
       P.Name=Element; 
       TxtLine.erase(0,idx+1); 


       idx=TxtLine.find_first_of('|'); 
       Element=TxtLine.substr(0,idx);    
       P.Type1=Element; 
       TxtLine.erase(0,idx+1); 

       idx=TxtLine.find_first_of('|'); 
       Element=TxtLine.substr(0,idx);    
       P.Type2=Element; 
       TxtLine.erase(0,idx+1); 

       for(int i=0;i<6;i++) 
       { 
        idx=TxtLine.find_first_of('|'); 
        Element=TxtLine.substr(0,idx);    
        P.IdxVector[i]=atoi(Element.c_str()); 
        if(Element.compare(" ")==0) 
         P.IdxVector[i]=-1; 
        TxtLine.erase(0,idx+1); 
       } 
       P.Stat=atof(TxtLine.c_str()); 
       PList.push_back(P); 
      } 


      return 0; 

     } 
Смежные вопросы