数据结构考试复习(1)

数据结构要考试了,这学期老师主要通过让我们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
复杂的输入输出

待补充