gpt4 book ai didi

C++ : Why isn't my (permuted index) code printing out correctly?

转载 作者:太空狗 更新时间:2023-10-29 23:09:40 25 4
gpt4 key购买 nike

我自己解决了 Accelerated C++ 的问题,这是我遇到的第一个问题。

问题是编写一个能够生成 permuted index 的程序。从一组线。

下面的代码有两个函数:permutedIndex5_1,它是排序的“main()”函数,以及 permuteLine5_1,它接受给定的行(以及对已经排列的行的 vector 的引用)并旋转排列给定的行,添加 vector 的每次旋转。

我遇到的问题是排列后的行在标准输出上打印不正确。我在 permuteLine5_1 中包含了几个 3 条调试语句来测试要打印的第一个和最后一个字符串,这些打印语句的结果显示了应该被打印出来的内容,但是打印出来的内容是完整的不同。

我的直觉是,这可能与我删除该函数中的迭代器有关,但我不确定如何纠正它。无论如何,我们将不胜感激。

编辑:读取的文本文件的内容是:

The quick brown fox
The slow brown fox
The quick blue dog

#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;
}*/


}

最佳答案

我认为您的迭代器删除没问题,因为您首先制作了字符串的真实拷贝,随后不会使用您的无效迭代器。

我会将排列简化为...

for(int i = 0; i < curLine.size(); i++)
{
string curBeginStr = curLine[0];

curLine.erase(curLine.begin());
curLine.push_back(curBeginStr);

但是,我认为真正的问题在于排序,我有点惊讶它的编译:

sort(permuted.begin(), permuted.end());

您正在尝试对字符串 vector 的 vector 进行排序 - 这意味着排序算法需要以某种方式比较两个字符串 vector 以确定顺序。我认为它无法做到这一点,您需要提供自定义排序谓词来执行您想要的精确比较。

<罢工>

感谢 Chris 的更正。

关于C++ : Why isn't my (permuted index) code printing out correctly?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4329132/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com