例:下面程序实现对一个文本文件的多种操作,包括求文件长度、统计单词长度等功能。
[cpp]
#include<iostream>
#include<fstream>
using namespace std;
void open(char str[])//打开文件函数,把文件内容传给str;
{
int i=0;
ifstream f;
f.open(“test.txt”,ios::in);//ifstream默认就是ios::in,此处可以省略
if (!f)
{
cout《“not open”《endl;
return ;
}
while (f)
{
f.get(str[i]);//一个一个取字符,包括空格。可参见myblog:cin\cin.get()\cin.getline()\getline()\gets()\getchar()用法集锦
i++;
}
str[i]='\0';//在读到的字符串最末加上‘\0'.
f.close();
cout《str《endl;
}
int len(char str[])//求字符串长度函数
{
int temp=0;
for(int i=0;'\0'!=str[i];i++)
temp++;
return temp;
}
int index(char a[],char b[])//找子串函数,返回子串首次出现的位置。
{
int i,j,temp;
for(i=0;i<len(a)-len(b);i++)
{
temp=i;
j=0;
while(j<=len(b)&&a[temp]==b[j])//对i位置及后面的字符,逐个字符判断是否字串
{
temp++;
j++;
}
if(j==len(b))//找到
return i;
}
return -1;
}
int count(char str[])//统计单词个数
{
int i,c=0;
for(i=0;i<len(str);i++)
if(' '==str[i])
c++;
return c+1;//以单词之间空格个数+1表示单词个数。比如3个单词间有2个空格。
}
void output(char a[])//输出当前文本
{
for(int i=0;i<len(a);i++)
cout《a[i];
cout《endl;
}
void output(char a[],int)//输出第一个单词
{
for(int i=0;i<len(a);i++)
if(' '==a[i])
break;
else
cout《a[i];
cout《endl;
}
int main()
{
char m[100];
char n[]=“ok”;
open(m);
cout《“字符串长度:”《len(m)-1《endl;
cout《“目标单词首次出现的位置:”《index(m,n)《endl;
cout《“单词数:”《count(m)《endl;
cout《“当前文本是:”《endl;
output(m);//输出当前文本
cout《“第一个单词是:”;
output(m,1);//输出第一个单词
system(“pause”);
return 0;
}
3.2读写二进制文件
二进制文件是一种不能用普通的字处理软件进行编辑、占空间较小的文件。二进制文件与文本文件的区别有以下几点:
1)文本文件是字符流,二进制文件是字节流。
2)文本文件在输入时,将回车和换行两个字符转换为字符“\n”,输出是将字符“\n”转换为回车和换行两个字符,二进制文件不做这种转换。
3)文本文件遇到文件结束符时,用get()函数返回一个文件结束标志EOF,该标志的值为-1.二进制文件用成员函数eof()判断文件是否结束。其中,eof()函数的原型为:int eof();
4)当文件达到末尾时,返回一个非零值;未达到末尾时返回零值。当从键盘输入字符时,结束符为<Ctrl>+z组合键。
任何文件,都能以文本方式或者二进制方式打开。对以二进制方式打开的文件,有两种方式进行读写操作:一种是使用函数get()和put(),另一种是使用函数read()和write()。
3.2.1使用get()和put()读写二进制文件
get()函数是输入流类istream中定义的成员函数,作用是从与流对象连接的文件中读出数据,get()实现的功能是从流中每读出一个字节或一个字符放入引用&ch中,返回一个流输入对象值。在c++中,get()函数原型为:
istream &get(unsigned char &ch);
put()函数是输出流类ostream中定义的成员函数,作用是向与流对象连接的文件中写入数据,put()实现的功能是每次将一个字节或一个字符写入流中,同时返回一个流输入对象值。在c++中,put()函数的原型为:
istream &put(char ch);
get()函数和put()函数都只能对单个字符或者单个字节进行操作,如果需要实现多字符的操作,可通过循环语句来实现。