在我的程序中,我试图从输入实际名称的用户行中取出然后将它们存储到矢量中。
我编写了自己的代码但是我遇到了运行时错误,告诉我“字符串下标超出范围”。
这是我的代码
const int LEN = 100;
struct Case{
public:
int No_People;
vector<string> Names;
vector<string> Results;
void Set_Data(){
cin >> No_People;
int Size = No_People;
char Line[LEN];
for (int i = 0; i < Size; i++){
cin.getline(Line, LEN);
Names.push_back(Line);
}
}
}
答案 0 :(得分:1)
我个人会定义一个代表一行的类。然后,您可以使用流迭代器来加载矢量。
class Line
{
std::string line;
public:
// Operator to convert a line back to a std::string
operator std::string const&() const {return line;}
// Friend function to read a line from a stream.
friend std::istream& operator>>(std::istream& in, Line& data)
{
return std::getline(in, data.line);
}
};
int main()
{
int countOfPeople;
std::cin >> countOfPeople;
std::vector<std::string> lines;
std::copy_n((std::istream_iterator<Line>(std::cin)), countOfPeople,
std::back_insert_iterator(lines));
}
答案 1 :(得分:0)
不需要使用char[]
数组,而是使用std::string
代替,特别是考虑到您已经在使用它。
OP注意:cin.getline()
就是这个:
std::istream::getline(char*, int)
你要用于std::string
的那个就是这个:
std::getline(istream&, string&)
struct Case{
public:
int Size;
vector<string> Names;
vector<string> Results;
void Set_Data(){
std::string temp;
cin >> Size; cin.ignore();
for (int i = 0; i < Size; i++){
std::getline(cin, temp);
Names.push_back(temp);
}
}
}
就编译错误而言,总是:
答案 2 :(得分:0)
很可能你是使用超出索引的下标访问字符串。如果你指出你得到错误的哪一行,那么很容易回答。