Immer Abbruch mit "uncaught exception vom Typ std::length_error: vector" Fehler C++

Ich Schreibe ein Programm zum lösen von Kreuzworträtseln. Also ich bin immer ein Wort aus einem text-Liste aller Wörter in der englischen Sprache, so dass jeder Vektor von chars, und der Vergleich, der Vektor zu einem Vektor von was auch immer beginnen Briefe, die ich habe. Es läuft wunderbar und gibt mir gute Ausgabe, aber jedes mal, wenn ich erhalte eine Fehlermeldung "libc++abi.dylib: Abbruch mit uncaught exception vom Typ std::length_error: vector".

Hier ist mein code:

#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
#include <string>
#include <iterator>

using namespace std;

string getLetters() {
    string word; //Get user letter, put in variable word
    cout << "Enter a set of letters" << endl;
    cin >> word;
    return word;
}

int getLengthOfWord() {
    int length; //Get length of word
    cout << "Enter the number of letters in the word" << endl;
    cin >> length;
    return length;
}

//Change strings to vectors of chars
vector<char> stringToVector(string word) {
    std::vector<char> v(word.begin(), word.end());
    return v;
}

bool compareVectors(vector<char> userWord, vector<char> listWord, int length) {

    if (listWord.size() != length) //Make sure the word from the list is the right length
    {
        return false;
    }

    int counter = 0; //Counter

    for (int i = 0; i < userWord.size(); i++) { //Iterating through the two words
        for (int j = 0; j < listWord.size(); j++) {
            if (listWord[j] == userWord[i]) { //If the letters match
                listWord.erase(listWord.begin() - 1 + j); //Erase the letter from the word
                counter++; //Increase counter
                break; //Break out of for loop
            }
        }
    }

    if (counter == userWord.size()) { //If there were as many matches as letters in user set
        return true;
    }
    else {
        return false;
    }

}

int main() {

    string example; //variable to put words
    ifstream wordList; //New ifstream object
    wordList.open("/Users/alexray/Dropbox/C++ Practice/WordJumbleSolver/wordsEn.txt"); //open word list

    int length = getLengthOfWord(); //Get user input
    string word = getLetters();

    vector<char> vector1(stringToVector(word));

    while (wordList.is_open()) {
        getline(wordList, example); //Get word, put it in example variable

        vector<char> vector2(stringToVector(example)); //Make word from list a vector
        vector2.erase(vector2.end() - 1); //Erase escape character from end of word
        if(compareVectors(vector1, vector2, length)) { //compare the vectors
            cout << example << endl;
        }
    }
    wordList.close(); //Close stream

    return 0;

}

Vom googeln um, ich dachte, es war eine Frage von meinem vector war anfangs nicht groß genug, um einige der Worte, sondern tun Vektor.reserve(some_number) vor der Zuweisung eines Wertes an die vector nicht helfen nichts. Auch konnte ich mir nicht vorstellen, dass ein Vektor hätte keine Probleme mit <20 Elemente.

Danke für die Hilfe! (Ich bin neu in C++ also wenn es etwas ich sollte natürlich auch anders machen, lass es mich wissen).

Bearbeiten: Die Datei arbeite ich mit der wordsEn.txt Datei von dieser website: http://www-01.sil.org/linguistics/wordlists/english/

  • Einer der 1. die wesentlichen Fertigkeiten zu erreichen, die mit der Programmierung ist, zu lernen, wie Sie Ihre debugger. Sie Schritt durch Ihr Programm eine Zeile, und herauszufinden, welcher Teil des Codes löst die Ausnahme.
  • aber tun Vektor.reserve, die nicht die Größe des Vektors. Die Funktion, die Sie wollen, ist vector::resize()
  • Danke, ich habe die Funktion zum ändern der Größe, aber selbst wenn ich angepasst, um einen lächerlichen Betrag, es wird immer noch der Fehler.
  • Nach den Kommentaren im code, warum Sie denken, es ist ein escape-Zeichen am Ende der Zeichenfolge zu entfernen? getline(wordList, example); // Get word, put it in example variable und diese vector2.erase(vector2.end() - 1); // Erase escape character from end of word?
  • Mit dem debugger und einem Blick auf die Werte der Elemente im Vektor. Sobald die Zeile in der string-variable und setzen Sie in einen Vektor, wird das Letzte element des Vektors ist ein "\r". Das war einer meiner früheren bugs, die ich hatte, zu beheben.
InformationsquelleAutor A. Ray | 2015-08-25
Schreibe einen Kommentar