Я хожу сам, несмотря на проблемы с ускорением C++, и это первый случай, с которым я сталкиваюсь.C++: Почему мой код (перестановленный индекс) не распечатывается правильно?
Проблема заключается в кодировании программы, которая может генерировать permuted index из набора строк.
Код ниже содержит две функции: permutedIndex5_1, которая является функцией "main()" sorts и permuteLine5_1, которая принимает заданную строку (и ссылку на вектор уже перестроенных строк) и переставляет данную строку вращаться, добавляя каждый поворот к вектору.
Проблема, с которой я сталкиваюсь, заключается в том, что перестроенные строки неправильно печатаются на stdout. Я включил несколько операторов отладки в permuteLine5_1, чтобы протестировать первую и последнюю строки для печати, а результаты этих заявлений печати показывают, что должно быть напечатано, однако то, что печатается, совершенно иное.
У меня возникает ощущение, что это может быть связано со стиранием итератора в этой функции, но я не уверен, как его исправить. В любом случае, любая помощь будет оценена по достоинству.
EDIT: Содержимое текстового файла для чтения являются:
шустрая лиса
Медленный коричневая лиса
Быстрый голубой собаки
#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;
}*/
}
Что он должен печатать и что он печатает вместо этого? – 2010-12-01 21:13:13
Он просто не поворачивает линию правильно. «|» строка всегда выводит сначала на stdout, несмотря на то, что мои инструкции отладки сообщают мне об обратном. Кроме того, некоторые буквы строк удаляются, что я не понимаю, так как я лично не касаюсь персонажей. Вот почему я думаю, что это имеет какое-то отношение к строке, на которую я возвращаюсь, поскольку это ссылка на строку, которую удалял итератор, на который я указал ... Я даже не уверен, почему код работает так, как есть, поскольку строка должен быть признан недействительным из моего понимания. – Kevin 2010-12-01 21:18:08