将地图 <string,int> 保存到文本文件
Saving map<string,int> to text file
我有一个字符串 int 映射,我想将它保存到一个 txt 文件中。我已经有一段时间没有使用 c++ 了,我对指针之类的东西一头雾水。
int WriteFile(string fname, map<string, int>* m) {
int count = 0;
if (m->empty())
return 0;
FILE* fp = fopen(fname.c_str(), "w");
if (!fp)
return -errno;
for (map<string, int>::iterator it = m->begin(); it != m->end(); it++) {
fprintf(fp, "%s=%s\n", it->first.c_str(), &it->second);
count++;
}
fclose(fp);
return count;
}
问题是整数被写成垃圾字符。
%s
用于打印字符串,您通过将错误类型的数据传递给 fprintf()
.
来调用 未定义的行为
您应该使用格式 %d
来打印 int
。
fprintf(fp, "%s=%d\n", it->first.c_str(), it->second);
#include<map>
#include<fstream>
#include<iostream>
using namespace std;
int WriteFile(string fname, map<string, int> &m) {
if (m.empty()) return 0;
ofstream fout;
fout.open(fname);
if(!fout) return -errno;
int count = 0;
for (auto it = m.begin(); it != m.end(); it++) {
fout<<it->first<<" = "<<it->second<<"\n";
count++;
}
fout.close();
return count;
}
int main()
{
map<string, int> m;
m["Hi there"]=1;
m["How are you"]=-7;
m["I am fine"]=-9;
m["Yo"]=15;
m["Code"]=2;
WriteFile("testing", m);
return 0;
}
您确实需要使用指针符号来通过引用传递。您只需在函数参数
中将 &
添加到 m
即可轻松做到这一点
我有一个字符串 int 映射,我想将它保存到一个 txt 文件中。我已经有一段时间没有使用 c++ 了,我对指针之类的东西一头雾水。
int WriteFile(string fname, map<string, int>* m) {
int count = 0;
if (m->empty())
return 0;
FILE* fp = fopen(fname.c_str(), "w");
if (!fp)
return -errno;
for (map<string, int>::iterator it = m->begin(); it != m->end(); it++) {
fprintf(fp, "%s=%s\n", it->first.c_str(), &it->second);
count++;
}
fclose(fp);
return count;
}
问题是整数被写成垃圾字符。
%s
用于打印字符串,您通过将错误类型的数据传递给 fprintf()
.
您应该使用格式 %d
来打印 int
。
fprintf(fp, "%s=%d\n", it->first.c_str(), it->second);
#include<map>
#include<fstream>
#include<iostream>
using namespace std;
int WriteFile(string fname, map<string, int> &m) {
if (m.empty()) return 0;
ofstream fout;
fout.open(fname);
if(!fout) return -errno;
int count = 0;
for (auto it = m.begin(); it != m.end(); it++) {
fout<<it->first<<" = "<<it->second<<"\n";
count++;
}
fout.close();
return count;
}
int main()
{
map<string, int> m;
m["Hi there"]=1;
m["How are you"]=-7;
m["I am fine"]=-9;
m["Yo"]=15;
m["Code"]=2;
WriteFile("testing", m);
return 0;
}
您确实需要使用指针符号来通过引用传递。您只需在函数参数
中将&
添加到 m
即可轻松做到这一点