标准::超出矢量<string>范围
std::out of range of vector<string>
我知道这个问题太老了,但是我找不到任何解决方法。
这是我的代码:
#include "iostream"
#include "string"
#include "vector"
#include "conio.h"
#include "fstream"
using namespace std;
using std::vector;
#define Ifile "Input.txt"
#define Ofile "Output.txt"
#define token1 "."
#define token2 "!"
#define token3 "?"
struct Wordcount
{
string wor;
int NOtime;
};
void SplitParagraph(vector<string> &source,string token);
void Import(vector<string> &source);
int Wordcounting(string s);
vector<Wordcount> Listword(vector<string> source);
vector<string> SplitSentence(string s);
vector<string> Themostwords(vector<Wordcount> List);
vector<vector<string>> WordSort(vector<string> List);
void Export(vector<string>& source,vector<Wordcount>& List,vector<string>& TheMost,vector<vector<string>> WordSort);
void main()
{
vector<string> source;
Import(source);
Export(source,Listword(source),Themostwords(Listword(source)),WordSort(source));
cout<<"Completed, please see the result in "<<Ofile;
_getch();
}
void SplitParagraph(vector<string> &source,string token)
{
for(int i = 0;i<source.size();i++)
{
char *temp = NULL;
temp = (char *)source.at(i).c_str();
string tempsentence=strtok(temp,token.c_str());
while(!tempsentence.empty())
{
source.insert(source.begin()+i,tempsentence);
i++;
}
}
}
void Import(vector<string> &source)
{
fstream file;
char* fin = "Input.txt";
file.open(fin,ios::in||ios::out);
while(!file.eof())
{
getline(file,source.at(0));
}
SplitParagraph(source,token1);
SplitParagraph(source,token2);
SplitParagraph(source,token3);
file.close();
}
int Wordcounting(string s)
{
int count = 0;
for(int i = 0;i<s.length();i++)
{
if(s[i] == ' ')
count++;
}
return count;
}
vector<Wordcount> Listword(vector<string> source)
{
vector<Wordcount> List;
vector<string> newsource = source;
SplitParagraph(newsource," ");
for(int i = 0;i<newsource.size();i++)
for(int j = 0;j<List.size();j++)
if(newsource.at(i) == List.at(j).wor)
List.at(j).NOtime++;
else
{
List.at(List.size()).wor = newsource.at(i);
List.at(List.size()).NOtime = 0;
}
return List;
}
vector<string> SplitSentence(string s)
{
vector<string> result;
char * S = new char[s.length() + 1];
std::strcpy(S,s.c_str());
string temp = strtok(S," ");
while(temp.empty())
{
result.at(result.size())=temp;
temp = strtok(S," ");
}
return result;
}
vector<string> Themostwords(vector<Wordcount> List)
{
vector<string> result;
int max = 0;
for(int i = 0;i<List.size();i++)
if(max<List.at(i).NOtime)
max = List.at(i).NOtime;
for(int i = 0;i<List.size();i++)
if(max == List.at(i).NOtime)
result.at(result.size()) = List.at(i).wor;
return result;
}
vector<vector<string>> WordSort(vector<string> List)
{
vector<vector<string>> result;
for(int i = 0;i<List.size();i++)
result.at(i) = SplitSentence(List.at(i));
for(int i = 0;i<List.size();i++)
for(int j = 0;j<result.at(i).size();j++)
for(int k = result.at(i).size(); k>j; k--)
{
int leng = result.at(i).at(j).length()<result.at(i).at(k).length()?result.at(i).at(j).length():result.at(i).at(k).length();
for(int z = 0;z<leng;z++)
if((int)result.at(i).at(j)[z]<(int)result.at(i).at(k)[z])
{
string temp;
temp = result.at(i).at(j);
result.at(i).at(j)=result.at(i).at(k);
result.at(i).at(k)=temp;
}
}
return result;
}
void Export(vector<string>& source,vector<Wordcount>& List,vector<string>& TheMost,vector<vector<string>> WordSort)
{
fstream data;
data.open(Ofile,ios::out);
data<<source.size()<<endl;
for(int i = 0;i<source.size();i++)
data<<List.at(i).NOtime<<endl;
for(int i = 0;i<TheMost.size();i++)
data<<TheMost.at(i)<<" ";
data<<" ";
for(int i = 0;i<WordSort.size();i++)
{
for(int j = 0;j<WordSort.at(i).size();j++)
data<<WordSort.at(i).at(j)<<" ";
data<<endl;
}
data.close();
}
I got problem in
void Import(vector<string> &source)
{
fstream file;
char* fin = "Input.txt";
file.open(fin,ios::in||ios::out);
while(!file.eof())
{
getline(file,source.at(0));
}
SplitParagraph(source,token1);
SplitParagraph(source,token2);
SplitParagraph(source,token3);
file.close();
}
当我跑到
getline(file,source.at(0));
编译器说:未处理的异常在0x758E1D4D在02.exe: Microsoft c++ exception: std::out_of_range在内存位置0x003FF4D8.
然后使用std::string
void Import(vector<string> &source)
{
fstream file;
char* fin = "Input.txt";
file.open(fin,ios::in||ios::out);
std:string STRING;
while(!file.eof())
{
getline(file,STRING);
}
SplitParagraph(source,token1);
SplitParagraph(source,token2);
SplitParagraph(source,token3);
file.close();
}
但是我不知道如何复制"STRING"到"source"
我试着搜索但没有找到。
如何修复out_of_range错误或将"STRING"复制到"source"
我所需要的就是解决这个问题。
谢谢!
您必须访问一个空的vector
。将代码getline(file,source.at(0));
替换为
string temp;
getline(file,temp); //store the string in temporary variable
source.push_back(temp); // add the string in vector
void Import(vector<string> &source)
{
fstream file;
char* fin = "Input.txt";
file.open(fin,ios::in||ios::out);
std:string STRING;
while(!file.eof())
{
getline(file,STRING);
source.push_back(STRING);
}
SplitParagraph(source,token1);
SplitParagraph(source,token2);
SplitParagraph(source,token3);
file.close();
}
相关文章:
- cppcheck在const std::string[]上引发警告
- 将std::string传递给WriteConsole API
- 为std::string的某个索引赋值
- std中有类似find_last_of的函数,而string中没有
- EASTL矢量<向量<int>>连续的
- 使用 std::string () const 函数启动线程或未来
- 使用char类型将decimal转换为string,将string转换为decimal
- 迭代和比较映射<字符串、矢量<string>> c++ 中的值
- 当我们进行一些操作时,应该使用什么'std::string'或'std::stringstream'?
- 将向量解析<string>为字符串
- 'string.assign(string.data(), 5)' 是明确定义的还是 UB?
- 如何更改大小(std::string)
- "string.h"在构建适用于iOS的qt应用程序中找不到消息
- C++:如何将 unix 时间的字符串转换为 *tm?(使用时间错误:"cannot convert 'String' to 'tm*' ")
- std::string 的对象真的可以移动吗?
- 与'operator='不匹配(操作数类型'String'且"void")
- SegFault 同时使用 std::string::operator+= 和函数作为参数
- 无法从 std::string 中提取C++ Unicode 符号
- std::string 构造函数如何处理固定大小的 char[]?
- <string> 使用 for 循环写入向量