1.iostream
1.打印浮点数的小数后的位数
建议:
1、C++尽量去用cin和cout,能用它就用他
2、用cout和cin不方便的地方,再去用scanf和printf
例子:
C++打印浮点数小数点后多少的方法
- 头文件iomanip
- fixed保留小数点后的0,比如1.103打印后3位;不加fixed打印1.1
- setpresision关键字
double a = 1.0 / 3.0;
printf("%.3f\n", a);
//C++打印浮点数小数点后多少的方法
#include<iomanip>
cout <<fixed<< setprecision(4) << a << endl;
2.getline和cin区别
有些oj需要多组测试,要求持续输出 ?
- cin获取字符串直到空格和换行
- getline获取字符串直到换行
string str;
cin >> str;//获取字符串直到空格和换行
cout << str<<endl;
cin >> str;
cout << str<<endl;
getline(cin,str);//获取字符串直到换行
cout << str<<endl;
3.多组测试,要求持续输出
- cin>>str返回值明明对象cin,为什么它可以做判读语句;重载了operator bool
//有些oj需要多组测试,要求持续输出
// ctrl+c结束
//C++
string str;
while (cin >> str)
{
cout << str << endl;
//...
}
//C语言
char buf[100];
while(scanf("%s", buf) != EOF)
{
printf("%s\n", buf);
//...
}
2.fstream
- 重载">>"和"<<"
struct ServerInfo
{
char _ip[20];
int _port;
};
struct ConfigManager
{
public:
ConfigManager(const char* filename)
:_filename(filename)
{}
void WriteTxt(const ServerInfo& info)
{
/*ofstream ofs(_filename);
ofs.write(info._ip, strlen(info._ip));
ofs.put('\n');
string portstr = to_string(info._port);
ofs.write(portstr.c_str(), portstr.size());*/
// C++流多提供的,其他的c一样都可以实现
ofstream ofs(_filename);
ofs << info._ip << "\n" << info._port;
}
void ReadTxt(ServerInfo& info)
{
//ifstream ifs(_filename);
//ifs.getline(info._ip, 20);
//char portbuff[20];
//ifs.getline(portbuff, 20);
//info._port = stoi(portbuff);
// C++流多提供的,其他的c一样都可以实现
ifstream ifs(_filename);
ifs >> info._ip >> info._port;
}
private:
string _filename;
};
3.sstream
c语言的序列化和反序列化
- 序列化:将其他类型转化为字符串
- 反序列化:将字符串转化为原本的类型
struct ServerInfo
{
char _ip[20];
int _port;
};
int main()
{
ServerInfo info = { "192.0.0.1", 8000 };
char buff[128];
// 序列化
sprintf(buff, "%s %d", info._ip, info._port);
// 反序列化
ServerInfo rinfo;
sscanf(buff, "%s%d", rinfo._ip, &rinfo._port);
}
c++的序列化和反序列化
struct ServerInfo
{
char _ip[20];
int _port;
};
int main()
{
ServerInfo info = { "192.0.0.1", 8000 };
stringstream ssm;
// 序列化
ssm << info._ip <<" "<<info._port;
string buff = ssm.str();
// 序列化
stringstream ssm;
ssm.str("127.0.0.1 90");
// 序列化
stringstream ssm("127.0.0.1 90");
ServerInfo rinfo;
// 反序列化
ssm >> rinfo._ip >> rinfo._port;
return 0;
}