c ++, как построить 2D матрицу строк из файла .dat? 5 столбцов х строк

Мне нужно прочитать файл .dat, который выглядит так:

Atask1 Atask2 Atask3 Atask4 Atask5
Btask1 Btask2 Btask3 Btask4 Btask5
Ctask1 Ctask2 Ctask3 Ctask4 Ctask5
Dtask1 Dtask2 Dtask3 Dtask4 Dtask5

и мне нужно иметь возможность выводить информацию, как это:

cout < line(3) < endl; // required output shown below
>>Ctask1 Ctask2 Ctask3 Ctask4 Ctask5

cout < line(2)(4) < endl; // required output shown below
>>Btask4
 Tom Panning10 окт. 2012 г., 03:46
@MerickOWA Спасибо за хедз-ап.
 Tom Panning10 окт. 2012 г., 02:46
Если это домашнее задание, оно должно быть помечено как таковое.
 MerickOWA10 окт. 2012 г., 03:26
Тег домашней страницы @TomPanning устарелmeta.stackexchange.com/questions/147100/...
 Code-Apprentice10 окт. 2012 г., 02:34
Вы знаете, как прочитать строку текста из вашего файла? Начните с этого и покажите нам, что у вас есть.

Ответы на вопрос(1)

Решение Вопроса

на которые я попытаюсь ответить за один раз. Итак, прости длину этого поста.

#include <iostream>
#include <sstream>
#include <string>
#include <vector>
#include <fstream>

int main(int argc, char argv[]){
  std::vector <std::string> v;//just a temporary string vector to store each line

  std::ifstream ifile;
  ifile.open("C://sample.txt");//this is the location of your text file (windows)

  //check to see that the file was opened correctly
  if(ifile.is_open()) { 
    //while the end of file character has not been read, do the following:
    while(!ifile.eof()) {
      std::string temp;//just a temporary string
      getline(ifile, temp);//this gets all the text up to the newline character
      v.push_back(temp);//add the line to the temporary string vector
    }
    ifile.close();//close the file
  }

  //this is the vector that will contain all the tokens that
  //can be accessed via tokens[line-number][[position-number]
  std::vector < std::vector<std::string> > tokens(v.size());//initialize it to be the size of the temporary string vector

  //iterate over the tokens vector and fill it with data
  for (int i=0; i<v.size(); i++)="" {="" tokenize="" the="" string="" here:="" by="" using="" an="" input="" stringstream="" see="" http:="" stackoverflow.com="" questions="" 5167625="" splitting-a-c-stdstring-using-tokens-e-g="" std::istringstream="" f(v[i].c_str());="" std::string="" temp;="" while(std::getline(f,="" temp,="" '="" '))="" tokens[i].push_back(temp);="" now="" tokens="" is="" completely="" filled="" with="" all="" information="" from="" file="" }="" at="" this="" point,="" vector="" has="" been="" you="" can="" actually="" use="" it="" like="" wanted:="" tokens[line-number][[position-number]="" let's="" test="" below:="" that="" correct="" for="" (int="" i="0;" i<tokens.size();="" for(int="" j="0;" j<tokens[i].size();="" j++)="" std::cout="" <<="" tokens[i][j]="" ';="" std::endl;="" system("pause");="" only="" true="" if="" windows.="" (shudder)="" return="" 0;="" <="" code=""></v.size();></std::string></std::string></fstream></vector></string></sstream></iostream>

Обратите внимание, я не использовал итераторы, которые были бы здесь полезны. Но это'Я думаю, вы можете попробовать что-то для себя.

 jrd110 окт. 2012 г., 04:16
@ Ретт, тыДобро пожаловать! Ура!
 jrd110 окт. 2012 г., 04:00
Также обратите внимание, что вектор токеновнулевой индексируется (как и все в C / C ++), поэтому в действительности, чтобы получить n-ю строку и n-ю позицию, вам нужно ввестиnth-1 индекс для строки иnth-1 Индекс для позиции.
 Rhett10 окт. 2012 г., 04:11
спасибо, что нашли время, чтобы дать мне такой подробный, прекрасный ответ. Приветствия # гордый пользователь linux

Ваш ответ на вопрос