2015-05-27 2 views
1

Я пытаюсь прочитать в текстовом файле 200 x 1000 чисел в массиве. Каждое число разделяется вкладкой. Я думал, что использование 2D-массива было бы хорошо для этой ситуации, так как это позволило бы мне различать отдельные строки. В этой ситуации важно различать отдельные строки, поэтому я хотел сделать это таким образом. Прямо сейчас у меня есть следующее:Ввод содержимого текстового файла в 2D-массив

#include <iostream> 
#include <fstream> 
#include <string> 

using namespace std; 

int main() 
{ 
    ifstream file("text.txt"); 
    if(file.is_open()) 
    { 
     string myArray[1000]; 

     for(int i = 0; i < 1000; ++i) 
     { 
      file >> myArray[i]; 
      cout << myArray[i] << endl; 
     } 
    } 
} 

В настоящее время он просматривает первую строку чисел в массиве и затем распечатывает ее. Я хотел иметь 2D-массив, который сканирует каждую отдельную строку в массив, но сохраняет их отдельно. Это означает, что содержимое строки 1 отделено от содержимого строки 2. Я решил, что 2D-массив сделает это. Я немного застрял в этой части. Я попытался сделать 2D-массив с помощью вложенного цикла, но когда я попытался скопировать значения в массив, все стало не так. Порядок был неправильным, и строки не были разделены. Я кодирую это на C++. Если кто-то может помочь мне понять, как импортировать текстовый документ, как тот, который я описал, и отправить всю эту информацию в 2D-массив, я бы очень признателен. Благодарю.

+1

Что случилось со старым стилем C вложенных циклов? – anishsane

+0

Почему строка, это цифры, правильно? Попробуйте один раз с 'file >> std :: ws >> myArray [i];' –

+1

Возможно, это поможет: http://stackoverflow.com/questions/30441732/store-txt-file-values-into-2d- array –

ответ

0

Вы можете использовать stringstream для извлечения чисел из каждой строки. Кроме того, вам не нужно иметь массив из string. Вы можете просто использовать один string.

int main() 
{ 
    ifstream file("text.txt"); 
    if(file.is_open()) 
    { 
     for(int i = 0; i < 1000; ++i) 
     { 
      string row; 
      if (std::getline(file, row)) 
      { 
       std::istringstream istr(row); 
       int number; 
       while (istr >> number) 
       { 
        // Add the number to a container. 
        // Or print it to stdout. 
        cout << number << "\t"; 
       } 
       cout << endl; 
      } 
     } 
    } 
} 
0

Если ваши размеры меняются, вы используете следующий код. Обратите внимание, что вы можете использовать std::copy для копирования из std::stringstream в std::vector:

#include <iostream> 
#include <iterator> 
#include <sstream> 
#include <vector> 

int main() 
{ 
    std::string input = 
    "11 12\n" 
    "21 22\n" 
    "31 32\n" 
    "41 42\n" 
    ; 

    std::stringstream file(input); 

    std::string temp; 
    while (std::getline(file, temp)) { 

    std::stringstream line(temp); 

    std::vector<std::string> v; 
    std::copy(
     std::istream_iterator<std::string>(line), 
     std::istream_iterator<std::string>(), 
     std::back_inserter(v)); 

    for (auto x: v) 
     std::cout << x << " "; 

    std::cout << "\n"; 

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