Программа Cpp два находит количество дней между двумя указанными датами, консоль CMD - PullRequest
0 голосов
/ 31 мая 2018
//C++ program two find number of days between two given dates
    #include "stdafx.h"
    #include<iostream>
    #include<string>

    using namespace std;

        // A date has day 'd', month 'm' and year 'y' 
    // 'h' hour , 'min' minute ; 'sec' second
    struct Date
    {
        int d, m, y, h, min, sec;
    };

Проблема в основном:

int main(int argc, char** argv)
{
    string line;
    getline(cin, line);

    int test = stoi(line);
    unsigned int * tab = new unsigned int[test];
    for (int i = 0; i <test; i++)
        tab[i] = 0;
    for (int i = 0; i<test; i++)
    {
        getline(cin, line);
        int n1 = stoi(line);                     
        int n2 = stoi(line);
        tab[i] = getDifference(n1, n2);  // HERE IS PROBLEM 
    }   

    for (int i = 0; i<test; i++)
            {
                cout << tab[i] << endl;
            }

Появляется ошибка: Нет подходящего конструктора для перенаправления "int" на "Date"

Как ее решить?Моя задача - загрузить данные через CMD, первая строка - количество тестов, следующая - 5 наборов дат, чтобы подсчитать разницу в днях между ними.Знаете ли вы, как сообщить программе, что первые две строки являются одним набором?

1 Ответ

0 голосов
/ 31 мая 2018

Вам нужно будет прочитать каждое число отдельно в членах Date -объекта, а затем сравнить Date -объекты, а не только одно целое число.Стратегия состоит в том, чтобы читать полными строками (например, «20 10 2017»), а затем использовать stringstream для чтения в отдельных числах:

#include <sstream>

struct Date
{
    int d, m, y, h, min, sec;
};

ostream& operator << (ostream& o, Date & d) {
    o << d.d << "/" << d.m << "/" << d.y;
    return o;
};

int main() {

    std::string line;
    if (std::getline(std::cin,line)) {
        int nrOfSets = 0;
        stringstream reader(line);
        reader >> nrOfSets;
        int i=0;
        Date previousDate;
        while (i < nrOfSets && getline(cin,line)) {
            Date d;
            reader = stringstream(line);
            if (! (reader >> d.d >> d.m >> d.y)) {
                cout << "invalid input." << endl;
                continue;
            }
            i++;
            if (i > 1) { // already two dates entered?
                cout << "calculating difference between " << d << " and " << previousDate << ":" << endl;
                // your code: int difference = calcDifference(d, previousDate);
            }
            previousDate = d;
        }
    }
}

Ввод / вывод:

2
20 10 2017
22 10 2017
calculating difference between 22/10/2017 and 20/10/2017:
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...