簡體   English   中英

如何從 std::cin 讀取到 istringstream

[英]How to read from std::cin to istringstream

我想以 [mm/dd/yy] 格式解析日期:

#include <sstream>
#include <iomanip>
#include <iostream>
#include <time.h>

int main()
{
    struct tm time;
    std::istringstream ss;
    std::cout << "enter string [mm/dd/yy/]: ";
    std::cin >> ss;
    ss >> std::get_time(&time, "%D");
    std::cout << time.tm_wday << std::endl;
}

但我無法從std::cin讀取到std::istringstream ,但為什么呢?

  1. 我也在尋求有關緩沖區的解釋。 在那里我有 2 個緩沖區(cin -> istream 和 istringstream),它們提供不同的緩沖區(一個用於“字符串”,另一個用於“屏幕 - stdout”),但是為什么當它們仍然只是一個流streambuf 甚至streambuf是如何用C++實現的? 是數組嗎? 一個結構?,我可以在某處找到它的源實現嗎?

您可以使用std::stringstd::getline

std::string input_text;
std::getline(std::cin, input_text);
std::istringstream input_text_stream(input_text);

不需要中間std::istringstream ,你可以直接做:

std::cin >> std::get_time(&time, "%D");

演示

要替換底層緩沖區,您必須調用rdbuf

std::istringstream ss;
std::cout << "enter string [mm/dd/yy/]: ";
ss.basic_ios::rdbuf(std::cin.rdbuf()); // substitute internal ss buffer with std::cin one
ss >> std::get_time(&time, "%D");

演示

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM