c++如何输入一个名称,从txt文件输出名称所在行? 5

例如输入ssr,从txt文件中输出ssr所在行的本行所有信息,先读进内存也可以。... 例如输入ssr,从txt文件中输出ssr所在行的本行所有信息,先读进内存也可以。 展开
 我来答
草原上之狼
高粉答主

2020-05-28 · 醉心答题,欢迎关注
知道大有可为答主
回答量:2.9万
采纳率:93%
帮助的人:4048万
展开全部
#include "stdafx.h"

#include <stdio.h>

#include <iostream>

using namespace std;

struct Line

{

int pos;

int len;

};

int GetLines(Line* pLine,FILE* fin);

void Write(Line* pLine,FILE* fin,FILE* fout,int line);

void main()

{

FILE* fa=fopen("A.txt","r");

FILE* fb=fopen("B.txt","w");

Line* pLine=new Line[1000];//最多1000行

int n=GetLines(pLine,fa);

int line;

cin>>line;

Write(pLine,fa,fb,line);

fclose(fa);

fclose(fb);

delete[] pLine;

}

void Write(Line* pLine,FILE* fin,FILE* fout,int line)

{

char* pBuf=new char[pLine[line].len];

fseek(fin,pLine[line].pos,SEEK_SET);//定位到文件第line行的位置

fread(pBuf,1,pLine[line].len,fin);//读入数据

fwrite(pBuf,1,pLine[line].len,fout);//写入数据

delete[] pBuf;

}

int GetLines(Line* pLine,FILE* fin)

{

char* pBuf=new char[10000];

int n=0;//行数

int len;

int count=0;

pLine[0].pos=0;//第一行

int i;

while(len=fread(pBuf,1,10000,fin))

{

for(i=0;i<len;i++)

{

if(pBuf[i]=='\n'/*换行符*/)

{

pLine[n].len=i+count*10000-pLine[n].pos;//第n行长度

pLine[++n].pos=i+count*10000;//第n+1行位置

}

}

count++;//读取文32313133353236313431303231363533e58685e5aeb931333262346533件次数

}

if(n>1)

pLine[n].len=i+count*10000-pLine[n-1].pos;//最后一行长度

delete[] pBuf;

return n;//返回行数

}

我重新改写了程序,现在这个程序可以读入很大的文件都没问题,每行的写数也可以很大。 注意:输入0表示是第一行。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式