一直拥有梦想的鹌鹑 2022-06-13 09:08 采纳率: 100%
浏览 21
已结题

二维数组的问题,回答

采用二维数组处理,设立二维数组edit[M][N]。M行,每行可存N个字符。用getchar()输入,单词之间用空格隔开(空格也会作为字符存入),当捕获回车字符(‘\n’)时则换行即M++。
采用文本形式存储,只需要提供写文件操作即可(fprintf,fwrite的用法)。
查找、替换、修改操作对文件进行。文件的查找、替换和修改操作可以参考前面的介绍。

  • 写回答

1条回答 默认 最新

  • a5156520 2022-06-13 10:33
    关注

    我的思路是:
    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;
        
    }
    

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 6月21日
  • 已采纳回答 6月13日
  • 创建了问题 6月13日

悬赏问题

  • ¥15 三电平逆变器中点电位平衡问题
  • ¥20 这怎么写啊 java课设
  • ¥15 双向孟德尔随机化反向是为什么显示参数长度为零
  • ¥15 用C语言完成一个复杂的游戏
  • ¥15 如何批量更改很多个文件夹里的文件名中包含文件夹名?
  • ¥50 MTK手机模拟HID鼠标出现卡顿
  • ¥20 求下下面这个数据结构代码
  • ¥20 前端 二进制文件流图片转化异常
  • ¥15 github上的这个C语言项目如何跑起来
  • ¥15 java 判断某个数 区间是否存在