一直拥有梦想的鹌鹑 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 ETLCloud 处理json多层级问题
  • ¥15 matlab中使用gurobi时报错
  • ¥15 这个主板怎么能扩出一两个sata口
  • ¥15 不是,这到底错哪儿了😭
  • ¥15 2020长安杯与连接网探
  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂
  • ¥15 wordpress 产品图片 GIF 没法显示