目录
C语言的输入与输出
流是什么
C++标准IO流
C语言文件的读写
二进制的形式读写
文本形式读写
C++文件IO流
stringstream
int main()
{int i = 1;double d = 2.22;cout << i; // -> cout.operator<<(i);cout << d; // -> cout.operator<<(d);cout << i << d; // 两个operator<<函数调用printf("%d, %f\n", i, d);//cin >> i;//cin >> d;cin >> i >> d;scanf("%d%f", &i, &d);cout << i << d << endl;printf("%d, %f\n", i, d);//scanf / printf 的缺点是只能支持内置类型// cout<< / cin>> 真正优势是,自己重载以后,自定义类型对象可以是简单实用//Date d;//cin >> d;//cout << d;return 0;
}
首先定义一个结构体(类)
struct ServerInfo
{char _ip[32];int _port;//Date _d; //自定义类型
};
void TestC_W_Bin()
{ServerInfo info = { "127.0.0.1", 80 };//二进制读写 fwrite/fread//文本读写 fprintf/fscanfFILE* fout = fopen("test.bin", "wb");assert(fout);fwrite(&info, sizeof(info), 1, fout);fclose(fout);
}void TestC_R_Bin()
{FILE* fin = fopen("test.bin", "rb");assert(fin);ServerInfo info;fread(&info, sizeof(info), 1, fin);fclose(fin);printf("%s:%d\n", info._ip, info._port);
}
void TestC_W_Text()
{FILE* fout = fopen("test.txt", "w");assert(fout);ServerInfo info = { "127.0.0.1", 80 };fprintf(fout, "%s %d", info._ip, info._port);fclose(fout);
}void TestC_R_Text()
{FILE* fin = fopen("test.txt", "r");assert(fin);ServerInfo info;fscanf(fin, "%s%d", info._ip, &info._port);fclose(fin);printf("%s:%d\n", info._ip, info._port);
}
class ConfigManager
{
public:ConfigManager(const char* filename):_filename(filename){}void WriteBin(const ServerInfo& info){ofstream ofs(_filename.c_str(), ios_base::out | ios_base::binary);ofs.write((const char*)&info, sizeof(ServerInfo));}void ReadBin(ServerInfo& info){ifstream ifs(_filename.c_str(), ios_base::in | ios_base::binary);ifs.read((char*)&info, sizeof(ServerInfo));}void WriteText(ServerInfo& info){ofstream ofs(_filename.c_str());ofs << info._ip << " " << info._port;}void ReadText(ServerInfo& info){ifstream ifs(_filename.c_str());ifs >> info._ip >> info._port;}private:string _filename;
};int main()
{/*TestC_W_Bin();TestC_R_Bin();*//*TestC_W_Text();TestC_R_Text();*//*ServerInfo info = { "127.0.0.1", 80 };ConfigManager cm("config.bin");cm.WriteBin(info);cm.ReadBin(info);cout << info._ip << ":" << info._port << endl;*/ServerInfo winfo = { "127.0.0.1", 80 };ConfigManager cm("config.txt");cm.WriteText(winfo);ServerInfo rinfo;cm.ReadText(rinfo);cout << rinfo._ip << rinfo._port << endl;return 0;
}
struct PersonInfo
{string _name;int _age;//...Date _d;
};int main()
{//序列化PersonInfo info = { "张三", 18 };ostringstream oss;oss << info._name << " " << info._age << " ";oss << info._d;string str = oss.str();//反序列化istringstream iss(str);string name;int age;iss >> name >> age;return 0;
}
上一篇:【算法题】1593. 拆分字符串使唯一子字符串的数目最大
下一篇:【算法】素数筛