我们说我们有一个c ++输入流。它包含一系列书籍及其发布日期和名称。输入数据中的一行看起来像这样。
Book title here Month Day, Year
我希望将书名放在一个字符串中,然后将该书放在另一个字符串中。这样string foo = Book title here ;
和string bar = Month Day, Year;
但是如果你只是做data >> string
它只会到达下一个空格。其中foo为foo = Month
,bar为bar = Day,
。 Getline获得foo变为foo = Month Day, Year Book title here
的整行,并且bar是下一行或者知道什么。
我到底该怎么做?
答案 0 :(得分:0)
对于这类工作,最好使用Comma-Separated Value,其中每个要阅读的元素用您选择的符号分隔,例如';'
。
Book title here;Month Day, Year
然后您可以使用
读取您的文件std::string title, date;
std::getline(yourFile, title, ';');
std::getline(yourFile, date);
getline()
的第三个参数指定用作字符串分隔符的符号。
希望有所帮助
答案 1 :(得分:0)
当基于行的格式变得复杂以进行解析时,最好先预读整行,然后更详细地分析行内容。
您的问题似乎就是这种情况,因为您无法知道您是否阅读了部分书名或书籍日期,除非有定义的分隔符或您到达行尾。请考虑以下示例行:
"Book Horror Story September 11, 2001"
"Book Horror Story September 11, 2001 October 12, 2019"
如果您左右解析此文本,则无法知道“2001年9月11日”是否属于标题或部分日期,直到您到达行尾。
因此,您从std::getline
开始将整行读入字符串,然后从每行中提取详细信息。您可以通过开发一个接受行格式或使用任何其他适当技术的正则表达式来手动解析@Someprogrammerdude注释的从右到左的行。