我有这段代码:
#include <fstream>
#include <iostream>
#include <string>
#include <vector>
#include <stdint.h>
std::vector<std::string> readIn(const std::string& fileName)
{
std::vector<std::string> strVec;
std::ifstream file(fileName);
std::string line;
while (!file.eof())
{
file >> line;
strVec.push_back(line);
}
file.close();
return strVec;
}
void sortVector(std::vector<std::string>& strVec)
{
size_t size = strVec.size();
for (size_t j = 4; j >= 0; j--)
{
for (size_t i = 0; i < size; i++)
{
for (size_t k = i; strVec[k][j] > strVec[k + 1][j]; k++)
strVec[k].swap(strVec[k+1]); //CRASHES HERE
}
}
}
int main()
{
std::string fileName = "input.txt";
std::vector<std::string> strVec = readIn(fileName);
size_t size = strVec.size();
std::cout << "Words in file:" << std::endl
<< "before sorting:";
for (size_t i = 0; i < size; i++)
std::cout << strVec[i] << " ";
sortVector(strVec);
std::cout << std::endl << std::endl << "after sorting:" << std::endl;
for (size_t i = 0; i < size; i++)
std::cout << strVec[i] << std::endl;
return 0;
}
我遇到的问题是将字符串排序为矢量。更具体地说,该程序在我的strVec[k].swap(strVec[k+1]);
函数中不喜欢sortVector()
。调试器还说我的vector
正确填充:
因此,readIn()
<{>}} {{}}
也许我不应该这么快就放弃,但我已经用Google搜索并阅读了关于向量(以及向量中的字符串)的所有内容,而且我仍然难以接受。你们给予的任何反馈都将非常感激。
编辑:这是我sortVector()
文件的内容:
input.txt
答案 0 :(得分:2)
我看到的一个问题是你没有任何检查以确保你没有访问超出范围的向量。
更改
for (size_t k = i; strVec[k][j] > strVec[k + 1][j]; k++)
strVec[k].swap(strVec[k+1]);
到
for (size_t k = i; k < size-1 && strVec[k][j] > strVec[k + 1][j]; k++)
strVec[k].swap(strVec[k+1]);
由于您要访问strVec[k+1]
,k
必须小于size-1
。
如果size
为0
,则会导致问题。您可以使用int
size
和k
代替size_t
来解决该问题。