将输入行存储到向量中

时间:2016-02-08 07:00:59

标签: c++

在我的程序中,我试图从输入实际名称的用户行中取出然后将它们存储到矢量中。

我编写了自己的代码但是我遇到了运行时错误,告诉我“字符串下标超出范围”。

这是我的代码

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);
    }
  }
}

3 个答案:

答案 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);
        }
    }
}

就编译错误而言,总是:

  • 引用确切的错误messgae
  • 告诉它发生在
  • 的路线
  • 显示包含该行和相关类/方法的代码

答案 2 :(得分:0)

很可能你是使用超出索引的下标访问字符串。如果你指出你得到错误的哪一行,那么很容易回答。