采用二维数组处理,设立二维数组edit[M][N]。M行,每行可存N个字符。用getchar()输入,单词之间用空格隔开(空格也会作为字符存入),当捕获回车字符(‘\n’)时则换行即M++。
采用文本形式存储,只需要提供写文件操作即可(fprintf,fwrite的用法)。
查找、替换、修改操作对文件进行。文件的查找、替换和修改操作可以参考前面的介绍。
我的思路是:
1、先把读取的MxN个字符写入文件
2、从输入获取要修改的字符及其替代字符
3、查找文件中指定字符的位置
4、定位到这个字符位置,然后进行修改。
代码如下:
#include <stdio.h>
#include <string.h>
#include <iostream>
#define M 3
#define N 10
using namespace std;
int main(void){
char edit[M][N];
int i=0,j=0;
char ch;
cout<<"请输入第"<<i+1<<"行的字符, 按回车结束此行输入:\n";
//获取MxN个字符输入
while(i<M){
ch=getchar();
j=0;
while(j<N&&ch!='\n'){
edit[i][j]=ch;
ch=getchar();
j++;
}
i++;
}
// int k;
// cout<<"输入的字符为:"<<endl;
// for(i=0;i<M;i++){
//
// for(k=0;k<j;k++){
// cout<<edit[i][k];
// }
// cout<<endl;
// }
FILE * fp = fopen("editfile.txt","w");
if(fp==NULL){
printf("打开或创建文件失败!\n");
return -1;
}
int k;
//写入文件
for(i=0;i<M;i++){
for(k=0;k<j;k++){
fprintf(fp,"%c",edit[i][k]);
}
}
fclose(fp);
//查找文件中指定的字符第一次出现的地方,并对他进行修改
char modify;
cout<<"请输入要修改的字符:"<<endl;
cin>>ch;
cout<<"请输入要修改成什么字符:"<<endl;
cin>>modify;
fp = fopen("editfile.txt","r");
if(fp==NULL){
printf("打开或创建文件失败!\n");
return -1;
}
char target;
long pos;
int find=0;
//查找文件中指定字符的位置
for(i=0;i<M;i++){
for(k=0;k<j;k++){
pos=ftell(fp);
fscanf(fp,"%c",&target);
if(target==ch){
find=1;
break;
}
}
if(find==1){
break;
}
}
fclose(fp);
// cout<<"pos="<<pos<<endl;
fp = fopen("editfile.txt","r+");
if(fp==NULL){
printf("打开或创建文件失败!\n");
return -1;
}
//把指定字符修改成目标字符
if(find==1){
fseek(fp,pos,SEEK_SET);
fwrite(&modify,sizeof(char),1,fp);
}
fclose(fp);
return 0;
}