将数据输入两个字符串

Input data into two strings

本文关键字:两个 字符串 数据 输入      更新时间:2023-10-16

假设我们有一个针对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成为下一行或知道什么。

我该如何处理?

对于此类工作,最好使用逗号分隔的值,其中每个要读取的元素都由您选择的符号分开,例如';'

Book title here;Month Day, Year

然后您可以使用

读取文件
std::string title, date;
std::getline(yourFile, title, ';');
std::getline(yourFile, date);

getline()的第三个参数指定用作字符串分离器的符号。

希望它有帮助

当基于行的格式变得复杂以解析开始完成时,最好预先阅读整个行,然后更详细地分析行内容。

您的问题似乎就是这种情况,因为您不知道您是否阅读了书名或书籍日期的一部分,除非有定义的定界符或您达到了终点。考虑以下示例行:

"Book Horror Story September 11, 2001"
"Book Horror Story September 11, 2001 October 12, 2019"

如果您解析本文左右,则无法知道" 2001年9月11日"是标题的一部分还是日期的一部分,直到您到达行结束。

因此,您从std::getline开始,以将整行读取为字符串,然后从每行提取详细信息。您可以按照@SomeProgrammerDude的评论,通过手动解析左线的行,通过开发一个正则表达式,该正则表达式接受行格式或使用任何其他适当的技术。