使用cin和/或字符串读取带有混合输入的文本文件

时间:2014-01-18 16:32:57

标签: c++ string cin getline

我刚刚开始解决我必须解决的编码问题,并且不确定如何开始并完成任务。有多个由单词组成的文本文件。如果单词是一个数字,那么这是学生在问题上的分数,因此您将其添加到学生的考试分数中。如果单词不是数字,而是单词“NAME”,则下一个单词是学生的姓名。如果单词是“AVERAGE”,那么你开始阅读数字,直到你读到一个不是数字的单词(或者是文件的结尾)。您平均所有这些数字并将其添加到分数中。有时一个数字不遵循“AVERAGE”。在这种情况下,您忽略“AVERAGE”。输入将始终只有一个名称,学生的名称将不是“平均”或“名称”。

以下是一些例子:

UNIX> cat test-1.txt
NAME Fred
UNIX> ./moonglow < test-1.txt
Fred 0
UNIX> cat test-2.txt
NAME Dontonio
8.6
16.2
UNIX> ./moonglow < test-2.txt
Dontonio 24.8
UNIX> cat test-3.txt
I miss Starrlight!!
15 NAME
Frank
UNIX> ./moonglow < test-3.txt
Frank 15
UNIX> cat test-4.txt
AVERAGE 10 15 20 NAME Luther 10 Starrlite!!
UNIX> ./moonglow < test-4.txt
Luther 25
UNIX> cat test-5.txt
NAME Baby-Daisy
AVERAGE 3 4 5 6
AVERAGE 7 8 9
Where's Starrlite!!
UNIX> ./moonglow < test-5.txt
Baby-Daisy 12.5
UNIX> cat test-6.txt
Starrlite AVERAGE Starrlite!!! NAME 
Starrlite
AVERAGE 55 Starrlite!!!  Starrlite
AVERAGE Starrlite 5 6 7
UNIX> ./moonglow < test-6.txt
Starrlite 73 

有时,文件中会出现不必要的单词,必须予以忽略。

基本上,我想知道用什么方法读取输入?函数getline?纯粹的cin?我不知道当每个信息可以在不同文件之间变化时,如何使用cin处理每条信息所在的不同位置(名称,平均值,分数)。

1 个答案:

答案 0 :(得分:0)

您正在从文件中获取输入,因此您无法使用cin等。
你必须在这个链接的“文本文件”中使用该方法:
http://www.cplusplus.com/doc/tutorial/files/

一旦你阅读了文本,你就必须解析它,检查每个元素,如果它是一个数字或一个单词,并根据需要进行处理。