准备ACM/ICPC!!关于数据输入方式的探讨。

来源:互联网 发布:高中地理知乎 编辑:程序博客网 时间:2024/05/14 13:39

输入的结束方式有

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 程序设计