算法竞赛宝典(第一部):语言及算法入门
上QQ阅读APP看书,第一时间看更新

读写函数

fputs与fgets函数

fgets的功能是在文件中读一行字符串。它有三个参数。

例如,fgets(a,n,in);其中a是一个char型数组用于存放读取的字符串,n表示读取n~1个字符,in是文件读入指针。

fgets函数会在读入的数据末尾加上一个空字符以构成一个字符串。

fgets与gets的不同之处在于,fgets读取到换行符后不会将其省略,而gets读到换行符时会退出,并会将换行符略去。

fputs的功能是在文件中写入一行字符串。它有两个参数。

例如,fputs(a,out);其中a是一个要输出的char型数组,out是文件输出指针。

fputs与puts的不同之处是fputs在打印时并不添加换行符。

参考程序如下所示:

1 //fgets and fputs
2 #include <iostream>
3 using namespace std;
4 
5 int main()
6 {
7  FILE *in=fopen("i.txt","rb");        //定义文件读入指针
8  FILE *out=fopen("o.txt","wb"); //定义文件输出指针
9  char a[9];
10  fgets(a,10,in);
11  fputs(a,out);
12  return 0;
13 }

getc与putc函数

getc函数的功能是从文件中读出一个字符。

常用的判断文件是否读取结束的语句为:(ch=getc(fp))!=EOF。EOF为文件结束标志。文件也可以被理解为一种流,故当文件输入指针为in时,getc(in)就等同于getchar()了。

putc函数的功能是把字符ch写到文件中去。

如果文件输出指针为out,则putc(out)就等同于putchar()了。

参考程序如下所示:

1 //getc and putc
2 #include <stdio.h>
3 
4 int main()
5 {
6  FILE *in=fopen("i.txt","rb");
7  FILE *out=fopen("o.txt","wb");
8  char c;
9  c=getc(in);
10  putc(c,out);
11  return 0;
12 }

fgetc与fputc函数

fgetc函数的功能是从fp的当前位置读取一个字符。

例如,fgetc(in);其中in是文件读入指针。

fputc函数的功能是将ch写入fp当前指定位置。

例如,fputs(ch,out);其中ch是要输出的字符,out是文件输出指针。

fscanf与fprintf函数

fscanf的功能是按照指定格式从文件中出读入数据。

fprintf的功能是将格式化数据(这里的格式化即按照指定格式)写入文件中。

有一道题,要求读取一行字符串,可是该字符串包含有空格,例如“I am a student”,如果使用通常的读写方法,当读到空格时,读写语句就会认为该字符串已经结束。那么,有什么好的办法读取含空格的字符串呢?

在实际应用中,有下列几种方法可以读入包括空格符的字符串。

1.用gets读取。

1 //gets读字符串
2 #include <iostream>
3 using namespace std;
4 
5 int main()
6 {
7  char a[100];
8  gets(a);
9  puts(a);
10  system("pause");
11  return 0;
12 }

2.用getline(cin,string)来读入一行包含空格符的字符串。

1 //getline读字符串
2 #include <iostream>
3 using namespace std;
4 int main()
5 {
6  string str;
7  getline(cin,str);
8  cout<<str;
9  system("pause");
10  return 0;
11 }

3.用cin.getline(字符指针,字符个数,结束符)。结束符默认是'\n'。

1 //cin.getline读字符串
2 #include <iostream>
3 using namespace std;
4 main()
5 {
6  char a[80];             //注意与上一个程序数据类型的区别
7  cin.getline(a,80);
8  cout<<a;
9  system("pause");
10  return 0;
11 }

4.用循环语句来判断是否读完一行,否则读取这一字符。

1 //循环语句读字符串
2 #include <iostream>
3 using namespace std;
4 main()
5 {
6  char c;
7  while((c=getchar())!='\n')    //此句前面必要加括号,而且不能在freopen下使用
8   cout<<c;
9  system("pause");
10  return 0;
11 }

Ch=fin.get();这是在文件流读写中使用的,是获得单个字符。

1 //fin.get()使用
2 #include <iostream>
3 #include<fstream>
4 using namespace std;
5 int main()
6 {
7  int a,b,c,space;
8  ifstream fin("in.txt");       //输入形式: a b c
9  ofstream fout("out.txt");  //输出三个个位数的积到文件out.txt
10  a=fin.get()-'0';  //特别注意该函数是获取一个字符包括空格符
11  space=fin.get();
12  b=fin.get()-'0';
13  space=fin.get();
14  c=fin.get()-'0';
15  fout<<a*b*c;
16  fin.close();
17  fout.close();
18  return 0;
19 }