如何用cpp中的地图内容覆盖文件
how to overwrite the file with map contents in cpp
我正在尝试用地图内容覆盖我的文本文件,谁能给我个主意
到目前为止我做到了
#include <string.h>
#include <iostream>
#include <map>
#include <utility>
using namespace std;
int main()
{
map<int, string> mymap;
mymap[34] = "hero";
mymap[74] = "Clarie";
mymap[13] = "Devil";
for( map<int,string>::iterator i=mymap.begin(); i!=mymap.end(); ++i)
{
cout << (*i).first << ":" << (*i).second << endl;
}
// write the map contents to file .
// mymap &Emp;
FILE *fp;
fp=fopen("bigfile.txt","w");
if(fp!=NULL)
{
for(map<int,string>::iterator it =mymap.begin();it!=mymap.end();++it)
{
fwrite(&mymap,1,sizeof(&mymap),fp);
}
fclose(fp);
}
}
我是容器新手。我的程序是否正确,在将地图内容写入文件时,它给我文件中的垃圾内容。
提前致谢
您的问题:
你对 fwrite()
的调用很糟糕。
fwrite()
将向给定文件写入一系列字节。例如,如果我们想向文件写入一个 int
,我们需要做一些类似的事情:
int x = 10;
char text[10];
snprintf(text, 10, "%d", x);
fwrite(text, 1, strlen(text), fp);
对于 std::string
,我们需要做如下事情:
std::string y = "Hello";
fwrite(y.c_str(), 1, y.size(), fp);
或者,您可以使用 fprintf()
:
int x = 10;
std::string y = "Hello";
fprintf(fp, "%d:%s\n", x, y.c_str());
让我们使用 C++ 工具而不是 C 工具:
如果我们使用C++的std::ofstream
,那么事情就简单多了。事实上,代码看起来与我们使用 std::cout
.
的方式几乎相同
#include <cassert>
#include <fstream>
#include <iostream>
#include <map>
#include <string>
#include <utility>
using namespace std;
int main() {
map<int, string> mymap;
mymap[34] = "hero";
mymap[74] = "Clarie";
mymap[13] = "Devil";
for(map<int,string>::iterator i=mymap.begin(); i!=mymap.end(); ++i)
cout << i->first << ":" << i->second << "\n";
// write the map contents to file.
std::ofstream output("bigfile.txt");
assert(output.good());
for(map<int,string>::iterator it =mymap.begin();it!=mymap.end();++it)
output << it->first << ":" << it->second << "\n";
}
这将输出到屏幕并写入 bigfile.txt
this:
13:Devil
34:hero
74:Clarie
我正在尝试用地图内容覆盖我的文本文件,谁能给我个主意 到目前为止我做到了
#include <string.h>
#include <iostream>
#include <map>
#include <utility>
using namespace std;
int main()
{
map<int, string> mymap;
mymap[34] = "hero";
mymap[74] = "Clarie";
mymap[13] = "Devil";
for( map<int,string>::iterator i=mymap.begin(); i!=mymap.end(); ++i)
{
cout << (*i).first << ":" << (*i).second << endl;
}
// write the map contents to file .
// mymap &Emp;
FILE *fp;
fp=fopen("bigfile.txt","w");
if(fp!=NULL)
{
for(map<int,string>::iterator it =mymap.begin();it!=mymap.end();++it)
{
fwrite(&mymap,1,sizeof(&mymap),fp);
}
fclose(fp);
}
}
我是容器新手。我的程序是否正确,在将地图内容写入文件时,它给我文件中的垃圾内容。 提前致谢
您的问题:
你对 fwrite()
的调用很糟糕。
fwrite()
将向给定文件写入一系列字节。例如,如果我们想向文件写入一个 int
,我们需要做一些类似的事情:
int x = 10;
char text[10];
snprintf(text, 10, "%d", x);
fwrite(text, 1, strlen(text), fp);
对于 std::string
,我们需要做如下事情:
std::string y = "Hello";
fwrite(y.c_str(), 1, y.size(), fp);
或者,您可以使用 fprintf()
:
int x = 10;
std::string y = "Hello";
fprintf(fp, "%d:%s\n", x, y.c_str());
让我们使用 C++ 工具而不是 C 工具:
如果我们使用C++的std::ofstream
,那么事情就简单多了。事实上,代码看起来与我们使用 std::cout
.
#include <cassert>
#include <fstream>
#include <iostream>
#include <map>
#include <string>
#include <utility>
using namespace std;
int main() {
map<int, string> mymap;
mymap[34] = "hero";
mymap[74] = "Clarie";
mymap[13] = "Devil";
for(map<int,string>::iterator i=mymap.begin(); i!=mymap.end(); ++i)
cout << i->first << ":" << i->second << "\n";
// write the map contents to file.
std::ofstream output("bigfile.txt");
assert(output.good());
for(map<int,string>::iterator it =mymap.begin();it!=mymap.end();++it)
output << it->first << ":" << it->second << "\n";
}
这将输出到屏幕并写入 bigfile.txt
this:
13:Devil
34:hero
74:Clarie