Я иду сам, хотя проблемы с Ускоренным C ++, и это первая проблема, с которой у меня возникают какие-либо проблемы.
Проблема в том, чтобы написать программу, способную генерировать перестановочный индекс из набора строк.
Приведенный ниже код имеет две функции: permutedIndex5_1, которая является функцией "main ()", и permuteLine5_1, которая принимает данную строку (и ссылку на вектор уже переставленных строк) и переставляет данную строкупоочередно, добавляя каждое вращение к вектору.
Проблема, с которой я сталкиваюсь, заключается в том, что переставленные строки распечатываются неправильно на стандартный вывод.Я включил несколько 3 операторов отладки в permuteLine5_1, чтобы проверить первую и последнюю строки для печати, и результаты этих операторов печати показывают, что должно быть распечатано, однако то, что печатается, совершенно другое.
Мне кажется, что это связано со стиранием итератора в этой функции, но я не уверен, как это исправить.В любом случае, любая помощь будет признательна.
РЕДАКТИРОВАТЬ: Содержание текстового файла читать:
Быстрая коричневая лиса
Theмедленная коричневая лиса
быстрая голубая собака
#include <vector>
#include <string>
#include <cctype>
#include <iostream>
#include <fstream>
#include <sstream>
using std::fstream;
using std::ios;
using std::istringstream;
using std::vector;
using std::string;
using std::cin;
using std::cout;
using std::endl;
void permuteLine5_1(vector< vector<string> >& lines, vector<string> curLine)
{
for(int i = 0; i < curLine.size(); i++)
{
vector<string>::iterator curBeginStrItr = curLine.begin();
string curBeginStr = *curBeginStrItr;
curLine.erase(curBeginStrItr);
curLine.push_back(curBeginStr);
cout << "The first string in the current line is : " + *(curLine.begin()) << endl;
cout << "The first string in the current line is VIA INDEXING IS : " + curLine[0] << endl;
cout << "The last string in the current line is : " + *(curLine.rbegin()) << endl;
for(int j = 0; j < curLine.size(); j++)
{
cout << curLine[j];
}
cout << endl;
lines.push_back(curLine);
}
}
void permutedIndex5_1()
{
vector< vector<string> > lines;
fstream fileLines;
fileLines.open("C:\\Users\\Kevin\\Desktop\\lines.txt", ios::in);
string curLine, curWord;
vector<string> curLineVec;
while(getline(fileLines, curLine))
{
cout << curLine << endl;
curLineVec.push_back("|");
istringstream strS(curLine);
while(getline(strS, curWord, ' '))
{
curLineVec.push_back(curWord);
cout << curWord << endl;
}
lines.push_back(curLineVec);
curLineVec.clear();
}
vector< vector<string> > permuted;
for(int i = 0; i < lines.size(); i++)
{
permuteLine5_1(permuted, lines[i]);
}
sort(permuted.begin(), permuted.end());
/*Code below prints out permutations. Commented out because
permuting function does not work properly
for(int i = 0; i < permuted.size(); i++)
{
vector<string> curVec = permuted[i];
for(int j = 0; j < curVec.size(); j++)
{
cout << curVec[j] << ' ';
}
cout << endl;
}*/
}