当前位置:编程学习 > C/C++ >>

C++修改txt文件里数据 历史最高分悬赏

历史最高分悬赏!!!!!!!!!!!

1.txt里数据
liming 1 200
xiaoqiang 2 300
xiaozhu 3 100
xiaokai 4 600

然后进行修改 比如将100改为50

有人建议是先放入string 然后再放到txt里

不知道怎么写 高分悬赏 方法不限
补充:请各位解答的人写代码出来  别讲思路
追问:怎么后面多了 4 600呀
答案:
#include<iostream>
#include<sstream>
#include<fstream>
#include<string>

using namespace std;
ofstream fout("data_m.txt",ios::app);
class A
{
public:
A(string name,int index,int count)
{
m_name=name;
m_index=index;
m_count=count;
}
void Modify(int count)
{
m_count=count;
}
void Output()
{
cout<<"Name is:"<<m_name<<" ;Index is:"<<m_index<<" ; Count is:"<<m_count<<endl;
}
void Write()
{
fout<<m_name<<" "<<m_index<<" "<<m_count<<endl;
}
private:
string m_name;
int m_index;
int m_count;
};

int _tmain(int argc, _TCHAR* argv[])
{
ifstream fin("data.txt");

if(!fin)
{
cout<<"Open file error!"<<endl;
return 0;
}
string name;
int index,count;
while(!fin.eof())
{
fin>>name;
fin>>index;
fin>>count;
A obj(name,index,count);
obj.Output();
if(count==100)
obj.Modify(500);
cout<<"修改后的结果:"<<endl;
obj.Output();
obj.Write();
}

return 0;
}
data.txt的数据为:
liming 1 200
xiaoqiang 2 300
xiaozhu 3 100
xiaokai 4 600
最终实现把100修改成500
data_m为修改后的文件
你所说的可以把这5个变量封装到一个结构体里面。比如说 
struct student{
char name[10];
int num;
int age;
char addr[20];
char phone[10];
}
这是C语言的实现方法,C++应该类似。
#include<stdio.h>
struct stu
{
char name[10];
int num;
int age;
char addr[15];
}boya[2],boyb[2],*pp,*qq;
main()
{
FILE *fp;
char ch;
int i;
pp=boya;
qq=boyb;
if((fp=fopen("stu_list","wb+"))==NULL)
{
printf("Cannot open file strike any key exit!");
getch();
exit(1);
}
printf("\ninput data\n");
for(i=0;i<2;i++,pp++)
scanf("%s%d%d%s",pp->name,&pp->num,&pp->age,pp->addr);
pp=boya;
fwrite(pp,sizeof(struct stu),2,fp);
rewind(fp);
fread(qq,sizeof(struct stu),2,fp);
printf("\n\nname\tnumber age addr\n");
for(i=0;i<2;i++,qq++)
printf("%s\t%5d%7d%s\n",qq->name,qq->num,qq->age,qq->addr);
fclose(fp);
}
#include <stdio.h>
#include <string.h>
#include<stdlib.h>
Replace(char *S,int start,char *T,char *V)
{
int i,j,k,l,n,m,s,count=0,signal=0;
n=strlen(T);/*求字符串长度*/
m=strlen(V);
s=strlen(S);
for(i=start-1;S[i]!='\0';i++)/*开始查找*/
{ k=i;
j=0;
while(S[k]==T[j])/*与子串T对比*/
{
k++;
j++;
}
if(T[j]=='\0')/*判断是否T存在*/
{
if(m-n>0)/*第一种情况,字符串V比T长的情况下*/
{
for(l=s+(m-n)*(count+1)-1;l>=k;l--)
S[l]=S[l-m+n];
for(l=k-n,j=0;j<m;l++,j++)
S[l]=V[j];
count++;
}
else if(m-n<0)/*第二种情况,字符串V比T短的情况下*/
{
for(l=k-n,j=0;j<m;l++,j++)
S[l]=V[j];
for(;l<s+(m-n)*(count+1);l++)
S[l]=S[l+n-m];
count++;
}
else/*第三种情况,T和V一样长*/
{
for(l=k-1;l>=k-n;l--,j--)
S[l]=V[j-1];
}
signal=1;
}
}
S[s+(m-n)*count]='\0';
if(signal)return 1;/*返回值*/
else return 0;
}
void main()
{
char b[100],c[100];
int n;
FILE *fp;
char *pBuf;
if((fp=fopen("1.txt","rb"))==NULL)
{printf("无法打开文件,请注意输入后缀!\n");
exit(0);
}
fseek(fp,0,SEEK_END);
int len=ftell(fp);
pBuf=new char[len+1];
rewind(fp);
fread(pBuf,1,len,fp);
pBuf[len]=0;
printf("%s\n",pBuf);
fclose(fp);

printf("请输入查找的子串T: ");
gets(b);
printf("请输入替换的子串V: ");
gets(c);
printf("请输入开始查找的位置start: ");
scanf("%d",&n);
if(Replace(pBuf,n,b,c))
printf("替换后的结果是: %s\n",pBuf);
else
printf("S中不存在子串T!\n");

if((fp=fopen("1.txt","wb"))==NULL)
{printf("无法保存文件,请注意磁盘是否已满!\n");
exit(0);
}
else
fwrite(pBuf,1,len,fp);
fclose(fp);
}

#include<fstream.h>
#include<malloc.h>
#define fileName "1.txt"
#define MAX 4

struct TEXT
{
char name[20];
char id[20];
char values[20];
};

void main()
{
int num=0,numMax=MAX,input;
char ch;
TEXT *text=new TEXT[5];
ifstream read(fileName,ios::in|ios::nocreate);
if(!read){cout<<"无法打开文件: "<<fileName<<" 文件不存在!"<<endl;return;}
while(read.get(ch))
{
if(num==MAX)
{
text=(TEXT*)realloc(text,sizeof(TEXT)*(numMax+MAX));
numMax+=MAX;
}
read.seekg(-1,ios::cur);
read>>text[num].name>>text[num].id>>text[num].values;
num++;
}
read.close();
do
{
cout<<"数据如下:"<<endl;
cout<<"编号\t数据1\t\t数据2\t数据3"<<endl;
for(int i=0;i<num;i++)
cout<<i+1<<"\t"<<text[i].name<<"\t\t"<<text[i].id<<"\t"<<text[i].values<<endl;

cout<<"请输入要修改数据的编号(0退出): ";
cin>>input;
if(input==0)break;
if(input>=num&&input<=0){cout<<"输入错误!"<<endl;continue;}
cout<<"请输入新数据:";
cin>>text[input-1].name>>text[input-1].id>>text[input-1].values;
}while(1);

ofstream write(fileName,ios::out);
for(int i=0;i<num;i++)
{
write<<text[i].name<<' '<<text[i].id<<' '<<text[i].values;
if(i!=num-1)write<<endl;
}
write.close();
}
由于只要求文件的修改,对于异常的错误不予处理!
文件1.txt中应该严格书写,一行3组数据,一组数据字符不超过19(超过自行修改程序),数据间空格分开,每一行回车,其他地方不换行也无空格:
struct student{ char name[10]; int num; int age; char addr[20]; char phone[10]; } 这是C语言的实现方法,C++应该类似。 #include<stdio.h> struct stu { char name[10]; int num; int age; char addr[15]; }boya[2],boyb[2],*pp,*qq; main() { FILE *fp; char ch; int i; pp=boya; qq=boyb; if((fp=fopen("stu_list","wb+"))==NULL) { printf("Cannot open file strike any key exit!"); getch(); exit(1); } printf("\ninput data\n"); for(i=0;i<2;i++,pp++) scanf("%s%d%d%s",pp->name,&pp->num,&pp->age,pp->addr); pp=boya; fwrite(pp,sizeof(struct stu),2,fp); rewind(fp); fread(qq,sizeof(struct stu),2,fp); printf("\n\nname\tnumber age addr\n"); for(i=0;i<2;i++,qq++) printf("%s\t%5d%7d%s\n",qq->name,qq->num,qq->age,qq->addr); fclose(fp); } 

上一个:求C++一个综合训练的代码!急
下一个:哪位大哥能帮我编程啊!!!C++的

CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,