2016-10-30 2 views
-1

Проще говоря мне нужна программа, которая читает текстовый файл и помещает все данные из текстового файла в массив.C++ Выходные данные текстового файла в массив символов

Я знаю, что можно выводить/прочитать текстовый файл с

// reading a text file 
#include <iostream> 
#include <fstream> 
#include <string> 
using namespace std; 

int main() 
{ 
    string line; 
    ifstream myfile ("numbers.txt"); 
    if (myfile.is_open()) 
    { 
    while (! myfile.eof()) 
    { 
     getline (myfile,line); 
     cout << line << endl; 
    } 
    myfile.close(); 
    } 

    else cout << "Unable to open file"; 

    return 0; 
} 

Что мне нужно, однако, то, что может взять текстовый файл ...

EX: answers.txt

A 
B 
C 
C 
D 
B 
A 
B 

И выводит данные в массив.

Конечный результат должен быть что-то вроде ....

char answers[] = [A, B, C, C, D, B, A, B]; 

Спасибо за любую помощь и все!

+0

На самом деле у меня была лучшая идея. std >> cin для переменной char вы получите символы, не так ли? –

+0

Используйте 'std :: vector ', чтобы хранить, как вы читаете, а также во имя всего святого, люди перестанут использовать 'while (! File.eof())' !!? – DeiDei

+0

@DeiDei что бы вы посоветовали вместо этого? – Treycos

ответ

0

Вот легкий способ я узнал ....

const int size = 20; 
char correctAnswers[size]; 
ifstream correctAnswersFile; 
correctAnswersFile.open("CorrectAnswers.txt"); 
for (int i = 0; i < size; i++) { 
    correctAnswersFile >> correctAnswers[i]; 
    cout << correctAnswers[i] << endl; 
} 
0

Вам нужно:

  1. Использование new[], чтобы получить буфер один и тот же размер, что и файл
  2. Затем read эти файлы содержимого в этот буфер
  3. использовать данные
  4. И не забудьте до delete[] буфер.

Если вы не хотите иметь дело с распределением памяти вручную и массивами C? Используйте getline() и сохраните его в std::string. Нет необходимости в new или delete, тогда просто используйте std::string::data(), чтобы получить указатель на массив char, если он вам когда-либо понадобится.

Это пахнет вопросом домашнего задания.

+0

* «Использовать' new [] '" * - нет, плохой совет. – ArchbishopOfBanterbury

+0

Это часть домашнего задания.Я не хочу, чтобы кто-то выполнял мою домашнюю работу, но я просто застрял в этой части, поэтому я спрашиваю. – CTOverton

+0

@ArchbishopOfBanterbury Не обязательно. Люди слишком зацикливаются на этом * никогда не используют новые и не удаляют в современной C++ * мастер-расе, что это становится плохо. – DeiDei

1

Вы можете использовать вектор, чтобы добавить свои строки.

// reading a text file 
#include <iostream> 
#include <fstream> 
#include <string> 
#include <vector> 
using namespace std; 

int main() 
{ 
    string line; 
    vector<string> lines; 
    ifstream myfile ("numbers.txt"); 

    if (myfile.is_open()) 
    { 
    while (! myfile.eof()) 
    { 
     getline (myfile,line); 
     lines.push_back(line); 
    } 
    myfile.close(); 
    } 

    else cout << "Unable to open file"; 

    for (unsigned i = 0; i < lines.size(); ++i) 
    cout << lines[i] << endl; 

    return 0; 
} 

Если вы хотите более подробной информации о векторе:

http://en.cppreference.com/w/cpp/container/vector http://www.cplusplus.com/reference/vector/vector/?kw=vector

Edit: Хорошо так, если я понимаю, вам что:

// reading a text file 
#include <iostream> 
#include <fstream> 
#include <string> 
using namespace std; 

int main() 
{ 
    string line; 
    string file; 
    char *str; 

    ifstream myfile ("numbers.txt"); 

    if (myfile.is_open()) 
    { 
    while (! myfile.eof()) 
    { 
     getline (myfile,line); 
     file += line; // Concatenate every lines 
    } 
    myfile.close(); 
    } 

    else cout << "Unable to open file"; 

    str = file.c_str(); // str contain the file as an array of char, without the newline char 

    return 0; 
} 
+0

Это действительно близко к тому, что мне нужно. Мне просто нужно использовать вывод для вывода в массив, но он должен быть массивом символов, поэтому он конфликтует со строкой с char – CTOverton

+0

. Я чувствую, что есть намного более простой способ сделать это, но это работает так, спасибо вам большое! – CTOverton

+0

str = file.c_str(); это будет недействительным в момент изменения вектора. Вам нужно выделить строку и скопировать ее. – dmg