在ACM程序设计中通常使用C++语言作为程序的整体框架,主要原因:C++本身兼容了C,一方面它既保持了C的简洁、高效和接近汇编语言的特性,同时也对C类型系统进行了改进和扩充;另一方面,C++也支持面向过程的程序设计,当然它并不是一个纯正的面向对象的语言。此外C++提供了许多可以方面用户编程的工具和丰富的算法库,例如Algorithm库中包含了许多用户可以直接使用的排序、组合等算法,算法的设计人员可以直接使用,这样避免了在赛场上有限的时间内,参赛人员重复某一个算法。
在算法设计的过程中,因为测试算法正确与否的数据并非手动输入而是通过程序本身读取文件或者后台输入的方式进行测试,所以掌握常用的输入输出方式是很重要的。首先明确几个概念:流、流类、流库。流:设备之间的信息交换;流类:是实现设备之间信息交换的类;流库:按面向对象方法的许多个流类构成的流类层次集合;功能完整、组织成类层次、可方便扩充。在C++中没有专门的输入输出语句,所有输入输出是通过输入输出流来实现的。在C++中,主要用到的输入输出流语句是cin,运算符号为“>>”;cout,运算符号为“<<”。
(一)输入语句:cin,输入语句自动过滤空白字符
输入格式:cin >> 变量名1 >> 变量名2 ......
Example1:
int a,b;
cin>>a>>b;
Example2:
float c,d;
cin>>c>>d;
Example3:
char ch1,ch2;
cin>>ch1>>ch2;
注:cin自动跳过输入的空格,换言之,cin不能将输入的空格赋给字符型变量,同样地,回车键也是作为输入字符之间的分隔符,也不能将输入的回车键字符赋给字符型变量。若要把从键盘上输入的每一个字符,包括空格和回车键都作为一个输入字符赋给字符型变量时,必须使用函数cin.get()。其格式为:cin.get(<字符型变量>);cin.get()从输入行中取出一个字符,并将它赋给字符型变量。这个语句一次只能从输入行中提取一个字符。
Example4:
char ch1,ch2,ch3;
cin.get(ch1);
cin.get(ch2);
cin.get(ch3);
输入:A B<CR>
结果:ch1:A ch2:空格 ch3:B
Example5:
char s1[10],s2[10];
cin>>s1;
cin.getline(s2,10);
输入:abc 123 456<CR>
结果:s1:abc s2:123 456
(二)输出语句:cout
输出格式:cout<<表达式1<<表达式2......。运算符“<<”称为插入运算符,它将紧跟其后的表达式的值,输出到显示器当前光标的位置。如果cout<<后跟带双引号的内容则表示原样输出。
Example1:
int a=6;
float f1=12.4;
char s1[ ]=“abcd”;
cout<<“a=”<<a<<‘\t’<<f1<<‘\t’<<s1<<endl;
注:endl表示换行,‘\t’为转义字符Tab。
小结一下:由于ACM竞赛题目的输入数据和输出数据一般有多组(不定),并且格式多种多样,所以,如何处理题目的输入输出是对大家的一项最基本的要求。这也是困扰初学者的一大问题,在后面的博文中将做进一步的介绍。