如何实现C语言对指定内容的查找与替换

zuiai214 2016-06-25 03:54:33
C语言文本指针这项一直没学好。现在我有一个文本文件其开头部分如下图,如果我希望键盘输入809,5,将原文本文件的N=20,M=3,替换为第二张图所示的N=809,M=5。
也就是说实现输入任何两个数,都可以将文本中的N,M值改为我输入的值,求教各位老师同学了。

...全文
1632 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
zuiai214 2016-06-27
  • 打赏
  • 举报
回复
谢谢老师!完美的解决了我的问题,涉及到的一些文件和指针的知识我先消化消化
赵4老师 2016-06-27
  • 打赏
  • 举报
回复
//所谓修改删除文件a某位置的内容,其实是读打开文件a,再将‘a中修改删除位置之前的内容+修改删除的内容+a中修改删除位置之后的内容’保存到文件b,关闭文件a,
//删除文件a,将文件b改名为与之前文件a相同的名字,仅此而已。
#include <stdio.h>
FILE *fi,*fo;
char ln[256],c;
int N,M,v;
int main() {
    fi=fopen("APDL3.mac","r");
    if (NULL==fi) {
        printf("Can not open file APDL3.mac!\n");
        return 1;
    }
    fo=fopen("tmp.mac","w");
    if (NULL==fo) {
        fclose(fi);
        printf("Can not create file tmp.mac!\n");
        return 2;
    }
    while (1) {
        printf("Input N,M:");fflush(stdout);
        rewind(stdin);
        if (2==scanf("%d,%d",&N,&M)) break;
    }
    while (1) {
        if (NULL==fgets(ln,256,fi)) break;
        if (2==sscanf(ln,"N=%d%c",&v,&c)) {
            if ('\n'==c) {
                fprintf(fo,"N=%d\n",N);
                continue;
            }
        }
        if (2==sscanf(ln,"M=%d%c",&v,&c)) {
            if ('\n'==c) {
                fprintf(fo,"M=%d\n",M);
                continue;
            }
        }
        fprintf(fo,"%s",ln);
    }
    fclose(fo);
    fclose(fi);
    remove("APDL3.mac");
    rename("tmp.mac","APDL3.mac");
    return 0;
}
zuiai214 2016-06-27
  • 打赏
  • 举报
回复
老师您好,您说的这个思路我理解,不过具体不知如何实现。在本例中我是希望通过输入数据,将文本内指定位置的值替换为我输入的值,比如说键盘输入809,5,将原文本文件的N=20,M=3,替换为第二张图所示的N=809,M=5。输入100,10,N和M后面的数字也相应发生变化。而不是您参考程序中指令框输入一行文字对指定字符串的替换。

赵4老师 2016-06-27
  • 打赏
  • 举报
回复
所谓修改删除文件a某位置的内容,其实是读打开文件a,再将‘a中修改删除位置之前的内容+修改删除的内容+a中修改删除位置之后的内容’保存到文件b,关闭文件a,删除文件a,将文件b改名为与之前文件a相同的名字,仅此而已。 仅供参考:
#include <stdio.h>
#include <string.h>
char s[256];
char *p;
int r,n,i;
int main() {
    while (1) {
        printf("请输入一行文字(空行结束),\"%%20\"将替换为\" \",\"你懂得\"将替换为\"XXXXXX\":\n");
        fgets(s,256,stdin);
        if ('\n'==s[0]) break;
        p=s;
        while (1) {
            p=strstr(p,"%20");
            if (p) {
                memmove(p+1,p+3,strlen(p)-3+1);
                p[0]=' ';
            } else break;
        }
        p=s;
        while (1) {
            p=strstr(p,"你懂得");
            if (p) {
                memmove(p+6,p+6,strlen(p)-6+1);
                for (i=0;i<6;i++) p[i]='X';
            } else break;
        }
        printf("%s",s);
    }
    return 0;
}
//请输入一行文字(空行结束),"%20"将替换为" ","你懂得"将替换为"XXXXXX":
//abcdefg%20helloworld%20something.pdf
//abcdefg helloworld something.pdf
//请输入一行文字(空行结束),"%20"将替换为" ","你懂得"将替换为"XXXXXX":
//这是测试文字你懂得,在这个你懂的地方,就得做你懂得的事
//这是测试文字XXXXX,在这个你懂的地方,就得做XXXXX的事
//请输入一行文字(空行结束),"%20"将替换为" ","你懂得"将替换为"XXXXXX":
//


zuiai214 2016-06-27
  • 打赏
  • 举报
回复
我现在可以找到我文本中N的位置,并通过键盘输入数据修改它的值。现在想要将这个修改的结果写入文本原来的位置。具体代码下面贴出,但不知如何将这一修改结果写入文本中,我也不知道我的思路对不对,求各位大大指导。
#include <stdio.h> 
#include <stdlib.h>
int main()
{
	FILE *fin;
	char x, y,a;
	int n,N;
	int i;
	fin = fopen("d:\\APDL3.mac", "r");
	for (i = 0; i<4; i++) fscanf(fin, "%*[^\n]%*c");  // 跳2 行
	fscanf(fin, "%c %c %d", &x, &y, &n);  // 读 3 个 字符	
	scanf("%d", &N);    //输入N的值
	n = N;
	printf("%c %c %d\n", x, y, n);  // 打出 N = ?
	fclose(fin);
}
zuiai214 2016-06-25
  • 打赏
  • 举报
回复
我贴出来的截图是我一段大程序的开头,按您说的全部重写可能工作量比较大啊。我现在想的方法是用指针查找需要替换的部分,不过具体不知道如何代码实现。 实际上我的任务是用c调用ansys语句,想要通过修改N,M值控制计算结果的输出。所以才需要替换M和N的值。
han0956 2016-06-25
  • 打赏
  • 举报
回复
内容这么少,不用替换,直接重新写一遍 用fprintf把所有内容重新写一遍

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧