2016-11-30 1 views
-2

Ich lerne C++ und habe mir eine Textdatei mit über 10.000 Zeilen erstellt. Ich versuche, ein String-Array zu erstellen und die erste Zeile in das erste Array, die zweite Zeile in das zweite Array usw. einzufügen. Hier ist, was ich bisher getan:Wie ein String-Array in C++ zuweisen?

ifstream theFile; 
string inputFile; 
cin >> inputFile; 
theFile.open(inputFile.c_str()); 
const unsigned int ARRAY_CAP = 64U; 

string line; 
string *lineArr = new string[ARRAY_CAP]; 

if (theFile.is_open()) { 
    int lineNumber = 0; 
    while (!theFile.eof()) { 
     getline(theFile, line); 
     lineArr[i] = line; 
     i++; 
    } 
} 

Ein Freund von mir sagte mir, das String-Array zu reservieren, da ich aus der Erinnerung renne, aber ich bin nicht einmal sicher, wie das zu tun. Wie kann ich das String-Array zuordnen?

+8

Warum verwenden Sie nicht einfach einen 'std :: vector >'? Auch "while (! TheFile.eof())" wird nicht das tun, was Sie wollen. –

+1

Verwenden Sie [std :: vector] (http://en.cppreference.com/w/cpp/container/vector) und vergessen Sie die Zuordnung. –

+0

@JesperJuhl Ich möchte auch wissen, wie man Arrays zuordnet. Mein älterer Bruder erzählte mir, dass sie die ganze Zeit im College Arrays zuweisen. :/ – James

Antwort

0

Wenn Sie bei dynamisch zugewiesenen Arrays bleiben möchten, müssen Sie diese dynamisch erweitern.

unsigned int lines_read = 0U; 
std::string text_line; 
unsigned int capacity = 4U; 
std::string * p_array = new std::string[capacity]; 
while (std::getline(theFile, text_line)) 
{ 
    p_array[lines_read] = text_line; 
    ++lines_read; 
    if (lines_read > capacity) 
    { 
    // Allocate new array with greater capacity. 
    unsigned int old_capacity = capacity; 
    capacity = capacity * 2U; 
    std::string p_new_array = new std::string[capacity]; 
    std::copy(p_array, p_array + old_capacity, p_new_array); 
    delete [] p_array; 
    p_array = p_new_array; 
    } 
} 

Der std::vector führt ähnliche Speicherverwaltung für Sie, so dass Sie die oben nicht zu tun haben.