如果我要求用户输入用短划线分隔的输入,我该如何将它们存储到多个变量中?每个部分由破折号分隔一个。 例如,这不起作用。
cout << "enter date" << endl;
// user inputs something like 11/11/1980
cin >> month
我理解输入存储在iostream中,但是如何在第一次斜杠后存储输出
答案 0 :(得分:2)
我认为您应该考虑使用C ++ 11已经为您提供的日期工具。
time.h&#39; struct tm
有it's own streaming operators。所以我做这样的事情:
#include <iostream>
#include <sstream>
#include <iomanip>
#include <ctime>
using namespace std;
int main() {
tm t;
istringstream ss("11/11/1980");
ss >> get_time(&t, "%m/%d/%Y");
cout << t.tm_mon + 1 << ' ' << t.tm_mday << ' ' << t.tm_year << endl;
return 0;
}
我不知道为什么,但值得注意的是tm.tm_mon
是基于0的...
答案 1 :(得分:1)
我刚刚遇到同样的情况,我觉得这很有效。 希望这仍然有用。
#include <iostream>
#include <string>
#include <iomanip>
int main()
{
// This is to initialize variables:
std::string mm,dd,yy;
// Now get the input
std::cout << "Enter the Date number: ";
// Then split it using std::getline() with delimiter '/'
// and assign them to relevant variables
std::getline(std::cin, mm,'/');
std::getline(std::cin, dd, '/');
std::cin >> yy;
std::cout << mm << " " << dd << " " << yy;
}
答案 2 :(得分:0)
您可以将输入存储在string
(或char数组)中,然后将所需的部分分开,为此您可以创建一个函数,该函数将input string
作为参数并将其部分分开。
答案 3 :(得分:0)
您可以在网上搜索“c ++阅读日期”以获取一些示例。
一种方法是:
unsigned int month;
unsigned int day;
unsigned int year;
char separator;
cin >> month >> separator >> day >> separator >> year;
但是有一些问题,例如在'/'。
之前有一个空格另一种方法是使fscanf
具有合适的格式字符串:
fscanf(stdin, "%2d/%2d/%4d", &month, &day, &year);
但是,这不使用C ++流。
您可以使用字符串和getline
:
std::string month_str;
std::string day_str;
std::string year_string;
std::getline(cin, month_str, '/');
std::getline(cin, day_str, '/');
std::getline(cin, year_str); // What's the delimiter here???