数据结构要考试了,这学期老师主要通过让我们stl的使用以及自学典型算法刷ACM水题来提高。
系列一记录ACM题中数据的读写问题。
##0X00
对于输入:
- 如果输入数据全部有普通的数组成,可以直接用cin >> Intnum;
- 或者 scanf(“%d”, &Intnum);
- 注意 scanf(“lld”, &Doublenum);
输出问题:
设置域宽:
1. <iomanip>
cout << right << setw(4) << Intnum; //设置域宽为4,默认右对齐
cout << left << setw(4) << Intnum; //左对齐
2. <cstdio>
printf("%4d", Intnum); //默认右对齐
printf("%04d", Intnum); //用0填充
设置小数位数:
1. <iomanip>
cout << setprecision(4) << Doublenum; //保留4位有效数字
cout << fixed << setprecision(4) << Doublenum; //小数点后保留4位小数
cout << scientific << setprecision(4) << Doublenum; //科学计数法保留4位小数
2. <cstdio>
printf("%.4f",Doublenum); //小数点后保留4位小数
##0X01
有时候需要把输入的一部分作为字符串处理
1. <string>
cin >> str;
解释:cin 对 string 的处理是,从第一个输入开始,看到空白符(空格,回车)都不管,等待有效输入,
有效输入完了,看到接下来的空白符,就把前面的有效输入当做一个字符串。
也就是说,str不会读空行,不会是空串。参考链接
2. string类中常用的几个函数
string::string
string::clear
string::compare
string::empty
string::erase
string::find
string::length
string::substr
##0X02
有时需要将数据以行为单位读入,并将字符串截取
<sstream>
<string>
string str, sa, sb;
getline(cin, str);
istringstream ss(str);
ss >> sa >> sb;
//注意:getline()会读取一整行,所以str可能是空串
//str="aaa bb"
//sa="aaa", sb="bb"
##0X03
输入中如果出现普通数的下一行是字符串的情况, 要考虑换行符
###Test 1###
cin >> Intnum;
getline(cin, str);
//Input:
//1
//abc
//str = ""
###Test 2###
cin >> Intnum;
cin >> str;
//Input:
//1
//abc
//str = "abc"
如果需要吸取一个回车符,可以使用cin.ignore();
##0X04
对于需要读到文件末尾的情况,可以这样:
while(!cin.eof()){
read...
}
同样,对于istreamstring ss(str)
同样有:
while(!ss.eof()){
ss>>sth...
}
##0X05
复杂的输入输出
待补充