C++怎么把写入文本的文本直接指向指定的字符

自行车在下成长性 2013-07-31 10:15:09
比如我
txt里面有123 语文
456
789 英语
当我输入456时,先匹配到456 是存在的然后我想让文本指针指向到456 后面然后在一个命名的函数里给456添加科目结果成 456 数学?怎么才能把文本指针指向到456后面而不会指向到其他位置?求教~本人刚学不久很多不会。就是根据自己输入的数字,然后指针指到该数字的后面 ----------------------------------------------------------------下面是代码------------------------------------------------------
#include<iostream>
#include <fstream>
#include <string>
#include <string.h>
#define N 3using namespace std;
typedef struct STU
{ int num;
string subject;}STU;
void main(){
//在文件中写入学号和科目
string number;
string name;
ofstream outstuf ;
outstuf.open( "test.txt" , ios::app|ios::binary ) ;
if ( !outstuf )
{ cerr << "文件不存在" << endl ;
abort(); }
cin>>number;
number=number+" ";
outstuf.seekp(0,ios::end); //多这名,文件指针移到尾
outstuf<<number.c_str();

//判断学号是否存在
STU stu[N];
for(int a=0;a<n;a++)in>>stu[a].num>>stu[a].subject;
for(int i=0;a<n;i++)if(number == stu[i].num){cin>>name;outstuf<<name.c_str()<<"\r\n";}outstuf.close();

这样做不行啊;能匹配到456存在,但是在写入科目的时候,它不是写在456的后面,而是最后一行。 比如:
----------------------------------------------------------------------------------------------怎么解决。我新手。能在原代码改下最好了。千万别for (i=0;i<3;i++) if (s2[i].id==456) { strcpy(s2[i].name,"LiSi"); k=i; break;};因为我输入的数字是随机的,我希望能输入数字后能匹配到数字存在,然后在把指针指向数字后面,方便在数字后面添加科目。不是仅仅在456后面。也可能是其他的数字

请用简单点的语言,因为我刚学不久,很多代码还不懂, 最好能在原代码改下
...全文
601 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
lm_whales 2013-08-13
  • 打赏
  • 举报
回复
引用 4 楼 todd_leftcode 的回复:
更加实用的思路是:把文件内容读到内存中, 在内存中对内容进行各种必要的修改, 写回文件覆盖原有内容。 这样 一简化了代码和逻辑 二减少文件读写提高效率 现在的设备,手机都好几百M内存,可以适当的放开些用
这种方法是方便,关键是和文件大小,内存大小相关了。 太大的文件,不适合。 内存太小,不合适。
todd_leftcode 2013-08-04
  • 打赏
  • 举报
回复
更加实用的思路是:把文件内容读到内存中, 在内存中对内容进行各种必要的修改, 写回文件覆盖原有内容。 这样 一简化了代码和逻辑 二减少文件读写提高效率 现在的设备,手机都好几百M内存,可以适当的放开些用
lm_whales 2013-08-04
  • 打赏
  • 举报
回复
ifstream ifs("test.txt",ios::binary ) ofstream ofs("test.new",ios::out|ios::trunc|ios::binary ) ; ifs.read(buf,4); //....,456; ofs.write(buf4);//....,456; ofs.write(tmp,4) //数学 ifs.read(buf,4); // ofs.write(buf,4); // ifs.close(); ofs.close(); rename("test.txt","test.bak"); rename("test.new","test.txt"); 大概就是这样吧。具体细节,自己推测。 不需要fseekp了。 如果非要,直接修改文件,记住需要插入几个字节。 所有后面的数据,后移插入的个字节数。 然后插入要插入的字节数,和数组插入数据的方法差不多。 不过,要两次seek ,一次读数,seekg,一次写数,seekp; 不要用app ,ate 方式打开。 其实追加方式打开,基本是多余的.需要追加,seekp到结尾即可,方便灵活.
  • 打赏
  • 举报
回复
我知道这思路 ,但是不知道具体的代码
赵4老师 2013-07-31
  • 打赏
  • 举报
回复
所谓修改删除文件a某位置的内容,其实是读打开文件a,再将‘a中修改删除位置之前的内容+修改删除的内容+a中修改删除位置之后的内容’保存到文件b,关闭文件a,删除文件a,将文件b改名为与之前文件a相同的名字,仅此而已。

65,180

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧