Три строки C ++, не полностью заполняющие все значения в текстовом файле

я пытаюсь отсортировать большое количество строк в алфавитном порядке и по длине, и кажется, что я сортирую только около 1/7 необходимого количества. Я пытаюсь отсортировать около 100 000 слов, когда я отсортировал 70000 слов, у меня получилось 8000 отсортированных слов, и я не могу понять, почему это не работает. Любая помощь приветствуется

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

using namespace std;

class Node
{
public:
char value;             // the character value
bool end;               // indicates whether this node completes a word
Node * children[93];    // represents the 93 ascii values for 33-126
Node(char newChar);
~Node();
};

class Trie
{
public:
Trie();
~Trie();
void addWord(string word);
Node * getRoot();
private:
Node * root;
};

Node::Node(char newChar)
{
value = newChar;

for (int i = 0; i < 93; ++i)
children[i] = NULL;
}

Node::~Node()
{
delete[] children;
}

Trie::Trie()
{
root = new Node(' ');
root->end = true;
}

Trie::~Trie()
{
delete root;
}

Node * Trie::getRoot()
{
return root;
}

void Trie::addWord(string word)
{
Node * currentNode = root;

for (int i = 0; i < word.size(); ++i)
{
char currentChar = word.at(i);
int index = currentChar - '!';

if (currentNode->children[index] != NULL)
{
currentNode = currentNode->children[index];
}

else
{
Node * newNode = new Node(currentChar);
currentNode->children[index] = newNode;
currentNode = newNode;
}

if (i == word.size() - 1)
{
currentNode->end = true;
}
}
}

void alphabetize(Node * node, vector<string> & sorting, string prefix = "") //why dont i have to declare this?
{
if (node->end)
{
sorting.push_back(prefix);
}for (int i = 0; i < 93; ++i)
{
if (node->children[i] != NULL)
{
string currentString = prefix + node->children[i]->value; //store all characters
alphabetize(node->children[i], sorting, currentString);
}
else
{

}
}
}

int main()
{
Trie * t = new Trie();
string tempS;

int lengthCounter = 0;
ifstream fin;

fin.open("test.txt");

vector< vector<string> > sortLength;
vector <string> row(0, "");
vector<string> sorted;

while(fin >> tempS)
{
while(tempS.length() > lengthCounter)
{
sortLength.push_back(row);
lengthCounter++;
}
t->addWord(tempS);
}

alphabetize(t->getRoot(),sorted); //filled with sorted vector

for(int i = 0; i < sorted.size(); i++)
{
sortLength[sorted[i].length()-1].push_back(sorted[i]);
}for(int k = 0; k < sortLength.size(); k++)
{
for(int l = 0; l < sortLength[k].size(); l++)
{
cout << sortLength[k][l] << "\n";
}
}

cout << sorted.size();return 0;
}

0

Решение

Задача ещё не решена.

Другие решения


По вопросам рекламы [email protected]