尝试使用两个单独的getline()实例来填充两个单独的向量

时间:2018-01-18 21:18:24

标签: c++ getline

我正在研究this HackerRank problem

在我的问题中,我试图使用getline()将两行不同的输入输入到两个单独的向量中以用于组织目的。

输入如下:

  

2015年9月6日   2015年6月6日

这是我的代码:

#include <cmath>
#include <cstdio>
#include <vector>
#include <iostream>
#include <algorithm>
#include<string>
#include <sstream>
using namespace std;

int main() {
    vector<int> expecDate;
    vector<int> retDate;
    string firstLine;
    string secLine;
    while(getline(cin, firstLine)){
        stringstream ss(firstLine);
        while(getline(ss,firstLine,' ')){
            int num = atoi(firstLine.c_str());
            retDate.push_back(num);
        }
    }
    while(getline(cin, secLine)){//want to use this second instance of getline() to fill the expecDate vector
        stringstream ss_2(secLine);
        while(getline(ss_2,secLine,' ')){
            int num_2 = atoi(secLine.c_str());
            expecDate.push_back(num_2);
        }
    }
    int year_e, month_e, day_e;
    int year_a, month_a, day_a;

    year_a = retDate[2];
    month_a = retDate[1];
    day_a = retDate[0];
    year_e = retDate[5];//want this to be expecDate[2]
    month_e = retDate[4];//want this to be expecDate[1]
    day_e = retDate[3];//want this to be expecDate[0]

    if(year_a <= year_e && month_a <= month_e && day_a <= day_e){
        cout<<"0"<<endl;
    }else if(year_a > year_e){
        cout<<"10000"<<endl;
    }else if(month_a > month_e){
        int total_m = 500*(month_a - month_e);
        cout<<total_m<<endl;
    }else if(day_a > day_e){
        int total_d = 15*(day_a - day_e);
        cout<<total_d<<endl;
    }


    return 0;
}

此代码返回正确的输出,我只是好奇我是如何做到这一点所以我可以使用两个向量而不是getline()完全填充第一个vector

更新:使用此代码expecDate根本没有填充。试图引用其任何成员导致分段错误。

1 个答案:

答案 0 :(得分:2)

在您的代码中使用DateTime.Now.AddYears(1)不正确。

while

将继续从while(getline(cin, firstLine)){ ... } 读取数据,直到无法从中读取数据。之后,

cin

没有做任何事情,因为while(getline(cin, secLine)){ ... } 中没有任何内容可供阅读。

不要使用cin。使用while

if