坚持学习100天:文本文件应用

前言

Hello,我是修齊。
学习C++的第一百零一十六天,双休那就好好学习。
在这里记录一些学习的东西和学习的心情,内容主要是一些自己学习整理的小笔记。

一、文本文件应用

#include 
void open(char strl)//打开文件函数
{
   int i=0;
   ifstream f;//创建输入流对象
   f.open("ok.txt",ios::in);//打开文件
   if(!f)
   {
      cout<<"not open"<<endl;
      return;
   }
   while(f)//取字符
   {
      f.get(str[i]);
      i++;
   }
   str[i]=`\0`;//最后一个字符为结束符
   f.close();//关闭文件
   cout<<str<<endl;//输出字符串
}
int len(char str[])//求字符串长度函数
{
    for(int i=0,temp=0;str[i]!=`\0`;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])//逐个字符判断是否子串
        {
            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]==` `)//有空格则完成
         break;
      else
         cout<<str[i];
         cout<<endl;
         
}
void main()
{
     char m[100];//定义文件名
     char n[]="ok";//定义需要查找的子字符串
     open(m);//打开文件
     cout<<"单词长度:"<<len(m)-1<<endl;
     cout<<"目标单词首次出现的位置:"<<index(m,n)<<endl;
     cout<<"单词书:"<<cout(m)<<endl;
     output(m);//输出当前文本
     output(m,1);//输出第一个单词
   
     
}

二、读、写二进制文件

1、读写二进制文件两种方式:
get()、put()
read()、write()
2.get()函数是输入流类istream中定义的成员函数,作用是从与流对象连接的文件中读取数据,原型有多种格式:istream &get(unsigned char &ch);
3.get()从流中每读出一个字节或一个字符放入引用ch&中返回一个流输入对象值。
4.put()函数是输出流类ostream中定义的成员函数,作用是向与流对象连接的文件中写入数据,原型有多种格式:istream &put(char ch):
5.put()将每一个字节或一个字符写入流中,同样返回一个流输入对象值。
6.get()和 put()都只能对单个字符或字节进行操作,多字符的操作,需要通过循环语句实现
7.read()函数是输入流类istream中定义的成员函数,常用原型为:
istream &read(unsigned char buf,int num);
8.read()函数从相应的流中读出num个字节或字符的数据,把它们放入指针所指向的缓冲区中。
9.第一个参数buf是一个指向读入数据存放空间的指针,是读入数据的起始地址。
第二个参数num是一个整数值,说明读入数据的字节或字符数
10.函数调用格式:read(缓冲区首地址,读入的字节数);
11.write()函数是输出流类ostream中定义的成员函数,常用原型:
ostream &write (const unsigned char
buf,int num);
12.从buf所指向的缓冲区把num个字节的数据写到相应的流中。

三、read()和write()读写二进制文件

向文件test.txt写入一个双精度数据类型的数值和一个字符串,并将文件中的内容读出显示到屏幕中。

#include//包含头文件
#include
main()
{
   ofstream outf("test.txt");//定义对象,打开文件
   if(!outf)//打开失败
   {
      cout<<"不能打开输出文件!"<<endl;
      return 1;
      
   }
   double n=123.44;//定义需写入的变量
   char str[]="向文件写入双精度数和字符串";
   outf.write((char *)&n,sizeof(double));
   outf.write(str,strlen(str));//调用写入函数
   outf.close();//关闭文件
   ifstream inf("test.txt");//定义对象,打开文件
   if(! inf)
   {
      cout<<"不能打开输入文件!”<<endl;
      return 1;
   }
   inf.read((char *)&n,sizeof(double));//读取文件其中的内容
   inf.read(str,26);//存入变量中
   cout<<n<<" "<<str<<endl;//输出变量中的值
   inf.close();//关闭文件
   return 0;
}

四、文件的随机读、写

1.随机读写使用输入或输出流中与随机移动文件指针相关的成员函数,通过随意移动文件指针而达到随机访问。
2.移动文件指针的成员函数主要有seekg()和seekp(),常用原型为:
istream &seekg(streamoff offset ,seek_dir origin);
ostream &seekp(streamoff offset ,seek_dir origin);
3.origin表示文件指针的起始位置
4.offset表示相对于这个起始位置的位移量
5.seek_dir是系统定义的枚举名
6.origin是枚举变量,取值有三种情况:
ios::beg(从文件头开始,offset值为正,从前向后移动文件指针)
ios::cur(从文件当前位置开始,offset值为负,从后向前移动文件指针)
ios::end(从文件尾开始,offset值可正可负)
7.位移量offset的类型是streamoff,为一个long型数据。
8.offset在头文件iostream.h中定义为:
typedef streamoff long;
9.seekg()输入文件,将文件的读指针从origin说明的位置移动offset个字节
10.seekp()输出文件,将文件的写指针从origin说明的位置移动offset个字节

11.随机读写时,确定文件当前指针的位置:
streampos tellg();
streampos tellp();
12.streampos在头文件iostream.h中定义的类型,long型,函数tellg()用于输入文件,函数tellp()用于输出文件。

五、文件随机读写

#include//包含头文件
#include
main(int argc,char *argv[1])//带参数的main()函数
{
    char ch;
    if(argc !=3)
    {
        cout<<"命令行输入错误!"<<endl;
        return 1;
    }
    ifstream fin(argv[1]);//定义输入流打开源文件
    if (!fin)//打开失败
    {
        cout<<"不能打开输入文件!"<<endl;
        return 1;
    }
    fin.seekg(atoi(argv[2]),los::beg);//在源文件的从文件头开始读取参数3指定的距离
    while (!fin.eof())
    {
        fin.get(ch);//逐个字符读取
        cout<<ch;//输出在屏幕上
    }
    fin.close();
    return 0;
}

上述内容如有侵权,联系即删。
感谢阅读-感谢支持

你可能感兴趣的:(笔记,编程语言,C++,学习,objective-c,c++)