输入的结束方式有:
1. 预先确定长度,无结束符。
2. 标志文本(如-1 和 0)。
3. EOF文件结束符(C/C++中的符号常量,代表-1,表示文件的末尾)。
Important:
对每组数据进行分别处理。即分组读入,然后马上处理。而不是把文件里的全部数据一次读入,因为有时根本不可能。
输入时的操作需注意:
用cin()时 变量是通过流提取符>>从流中提取数据的,通常跳过输入流中的 :空格 ,tab键,换行符,回车符等,应灵活运用:
get();getline();read();
以下是几种典型的输入:
1. 输入有若干行。每行有一个整数,它是测试数据:
Int n;
While(cin>>n)
{
处理n
}
2. 输入有若干行。每行有两个整数a,b,之间有空格隔开。直到文件结束为止。
Int a,b;
While(cin>>a>>b)
{
..处理a和b
}
3. 输入有若干组测试数据。每组测试数据由两行构成,第一行是一个正整数n第二行有n个整数,之间用一个空格隔开。
Const int MAXN = 1000;
Int n,I,a[MAXN];
While(cin>>n)
{
For(i=0;i<n; i++)
{
Cin>>a[i]
}
处理数组a的信息
}
4. 输入的第一行有一个整数T,表示测试数据的组数,接下来有T行,每行是一个有空格的字符串。
Const int MAXN =1000;
..
Int T;
Char str[MAXN];
Cin>>T;//发现T根本就没用
Cin.getline(str,10);//吸收数据T(上一行)所在行尾部的信息(比如回车什么的)
While(Cin.getline(str,MAXN))
{
处理有关str的信息
}
5. 输入有若干行,每行是一个含有空格的字符串。
Const int MAXN = 1000;
…
Char str[MAXN];
While(Cin.getline(str,MAXN))
{
处理str的信息
}
6. 输入的第一行是一个整数T,表示T组测试数据。接着是这T组测试数据的描述。每组测试数据有3行,其中第一行是2个整数m,n。第二行有m个整数。第三行有n个整数。每行整数之间有一个空格。两组测试数据之间有一空行。
。。。
Int T,m,n,I;
Int *a,*b;
Cin>>T;
While(cin>>T)
{
Cin>>m>>n;
a=new int [m+1];
b=new int [n+1];
for(i=0; i<m; i++)cin>>a[i];
for(i=0; i<m; i++)cin>>b[i];
处理数组a和数组b的信息
}
7. 综合版。输入的第一行是一个整数T,表示T组测试数据。接着是T行,每行有若干个整数
(可以综合上述6种方法进行处理)
附带输出的一点东西:
输出时应注意:
输出的精度!!,宽度!!,行尾是否有空格??!!一组数据后是否有空行??
不常见的输出函数:
put()函数;
#include<iostream>
using namespace std;
int main()
{
cout.put(‘h’).put(‘e’).put(‘l’).put(‘p’)/put(‘\n’);
return 0;
}
输出 help换行。
注意put(35);会把35解析成ASCII码,35对应#;
write()函数:
write(String_address,output_number)有两个参数第一个是字符串的首地址,就是字符串的名字,第二个是输出的字符的个数
#include<iostream>
using namespace std;
int main()
{
char ch[]=”hello world”;
int length = strlen(ch);
cout.write(ch,length).put(‘\n’).write(ch,length-6);
return 0;
}
输出:hello world换行hello
设置宽度,精度,字符填充的方法
字段宽度:
Cout.width(int);只影响将要显示的宽度,与setw();一样
未完待续。。。。
参考资料:ACM/ICPC 程序设计