C++修改txt文件里数据 历史最高分悬赏
历史最高分悬赏!!!!!!!!!!!1.txt里数据liming1200xiaoqiang2300xiaozhu3100xiaokai4600然后进行修改比如将100改为...
历史最高分悬赏!!!!!!!!!!!
1.txt里数据
liming 1 200
xiaoqiang 2 300
xiaozhu 3 100
xiaokai 4 600
然后进行修改 比如将100改为50
有人建议是先放入string 然后再放到txt里
不知道怎么写 高分悬赏 方法不限 展开
1.txt里数据
liming 1 200
xiaoqiang 2 300
xiaozhu 3 100
xiaokai 4 600
然后进行修改 比如将100改为50
有人建议是先放入string 然后再放到txt里
不知道怎么写 高分悬赏 方法不限 展开
3个回答
2014-05-16
展开全部
#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");<br/>exit(0);<br/>}
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");<br/>exit(0);<br/>}
else
fwrite(pBuf,1,len,fp);
fclose(fp);
}
#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");<br/>exit(0);<br/>}
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");<br/>exit(0);<br/>}
else
fwrite(pBuf,1,len,fp);
fclose(fp);
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
今至电子科技有限公司
2024-08-23 广告
2024-08-23 广告
上海今至电子科技有限公司,是一家从事运维服务、系统集成和网络工程的专业公司。业务涵盖IT解决方案、网络工程、应用软件开发、系统集成、服务器虚拟化、桌面虚拟化、高性能运算、负载均衡、数据容灾备份、服务外包、IT运维等。我们的理念:诚信为本,服...
点击进入详情页
本回答由今至电子科技有限公司提供
2014-05-16
展开全部
你所说的可以把这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);
}
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);
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2014-05-16
展开全部
#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为修改后的文件
#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为修改后的文件
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |