怎么用C++在文本中读取一行或多行指定的数据?

如:文本内容为:姓名:zhangsan年龄:19语文成绩:89姓名:lisi年龄:21语文成绩:77如果我想要在命令行显示语文成绩,并自动进行由高到底排序:语文成绩:89... 如:文本内容为:姓名:zhangsan 年龄:19语文成绩:89姓名:lisi年龄:21语文成绩:77 如果我想要在命令行显示语文成绩,并自动进行由高到底排序:语文成绩:89语文成绩:77 请教:用C++的方法接受用户输入查询。 能帮我举出相似的例子并加以注释吗?我是一名初学者,希望能够帮我解决问题。 展开
 我来答
tattackor
推荐于2017-09-18 · TA获得超过3.5万个赞
知道大有可为答主
回答量:5083
采纳率:94%
帮助的人:890万
展开全部

使用fgets函数即可。

1、fgets函数:
原型:char * fgets(char * buf, int bufsize, FILE * stream);
功能:从文件结构体指针stream中读取数据,每次读取一行;
说明:读取的数据保存在buf指向的字符数组中,每次最多读取bufsize-1个字符(第bufsize个字符赋值为\0)。如果该行不足bufsize个字符,则读完该行就结束,如果该行超过bufsize-1个字符,则fgets只返回一个不完整的行,buf缓冲区以\0字符结束,下一次fgets调用会继续读取该行剩余的字符;
头文件:stdio.h;
返回值:若读入成功,返回与参数buf相同的字符指针,若读入过程中遇到EOF或发生错误,返回NULL指针。所以当遇到返回值为NULL的情况时,应使用ferror或feof函数检查是发生错误还是遇到EOF。
2、例程:

#include<stdio.h>
int a;
char b,c[100];
int main(){
    FILE * fp1 = fopen("input.txt", "r");//打开输入文件
    FILE * fp2 = fopen("output.txt", "w");//打开输出文件
    if (fp1==NULL || fp2==NULL) {//若打开文件失败则退出
        puts("不能打开文件!");
        return 0;
    }
    fscanf(fp1,"%d",&a);//从输入文件读取一个整数
    b=fgetc(fp1);//从输入文件读取一个字符
    fgets(c,100,fp1);//从输入文件读取一行字符串
    
    printf("%ld",ftell(fp1));//输出fp1指针当前位置相对于文件首的偏移字节数
    
    fputs(c,fp2);//向输出文件写入一行字符串
    fputc(b,fp2);//向输出文件写入一个字符
    fprintf(fp2,"%d",a);//向输出文件写入一个整数
    
    fclose(fp1);//关闭输入文件
    fclose(fp2);//关闭输出文件,相当于保存
    return 0;
}
匿名用户
2013-07-03
展开全部
用getline函数,从文件流中读取每一个,然后和"语文成绩"这个字符串比较,如果匹配,就加入vector中,然后全部读取完以后,再排序。这样说你会懂吗?不懂我帮你写。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2013-07-03
展开全部
主要考察读写文件以及字符串类中的一些成员函数的应用。#include <iostream>#include <map>
#include <fstream>
#include <string>
#include <sstream>
using namespace std;int main()
{
string str[100];
int i=0;
memset(str,0,100);
while (true)
{
ifstream iFile("1.txt");
if (!iFile)
{
throw runtime_error("file open failture!");
}
string strSearch;

cout<<"please enter the searchItem:";
cin>>strSearch;
string strLine;
while (getline(iFile,strLine))
{
if (strLine.find(strSearch.c_str())!=-1)
{
str[i]=strLine;
i++;
}
}

int j=0;
string strTemp=str[0];
for (j=0;j<i;j++)
{
int k=j;
for (int p=j;p<i;p++)
{
if (str[k]<str[p])
{
k=p;
}
}
if (k!=j)
{
strTemp=str[j];
str[j]=str[k];
str[k]=strTemp;
}
}
for (j=0;j<i;j++)
{
cout<<str[j]<<endl;
}
cout<<"continue search? <y/n>:";
char c;
cin>>c;
if (c=='n')
{
break;
}
iFile.close();
}

return 0;
}你将信息写在项目中一个名为1.txt的文档中。刚敲完。如果需要源代码的话,留下邮箱。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式