我是C ++的新手,我正在尝试编写一个简短的C ++程序来读取 文件中的文本,每行包含一个整数键和一个字母数字字符串值(没有嵌入的空格)。预先不知道行数(即,保持读取行直到达到文件末尾)。程序需要使用'std :: map'数据结构来存储从输入读取的整数和字符串(以及将整数与字符串相关联)。然后程序需要将字符串值(但不是整数值)输出到标准输出,每行1个,按整数键值(从最小到最大)排序。因此,例如,假设我有一个名为“data.txt”的文本文件,其中包含以下三行:
10只狗 -50马输出应为:
马
斑马
猫
狗
海象
我已粘贴到目前为止我在C ++程序上取得的进展:
#include <fstream>
#include <iostream>
#include <map>
using namespace std;
using std::map;
int main ()
{
string name;
signed int value;
ifstream myfile ("data.txt");
while (! myfile.eof() )
{
getline(myfile,name,'\n');
myfile >> value >> name;
cout << name << endl;
}
return 0;
myfile.close();
}
不幸的是,这会产生以下错误输出:
马
猫
斑马
海象
如果有人对变更和修订有任何提示,提示,建议等 我需要对程序进行制作,以便根据需要使其工作,是否可以取悦 让我知道?
谢谢!
答案 0 :(得分:2)
看到它:
#include <iostream>
#include <string>
#include <fstream>
using namespace std;
int main()
{
string name;
int value;
ifstream myfile("text.txt", ifstream::in);
while(myfile >> value >> name)
cout << name << endl;
return 0;
}
答案 1 :(得分:1)
您遇到问题是因为您尝试两次读取每一行:首先使用getline,然后使用运算符&gt;&gt ;.
答案 2 :(得分:0)
你根本没有在任何方面使用std::map
。您需要将整数/字符串对插入到映射中,然后作为输出迭代它。并且不需要close()
流。
答案 3 :(得分:0)
代替使用“!myfile.eof()”,它会有所帮助。
ifstream is;
string srg;
is.open(filename);
while(getline(is,srg))
{//your code
}