鱼C论坛

 找回密码
 立即注册
查看: 4587|回复: 6

字符替换,子函数运行后无任何改变

[复制链接]
发表于 2013-4-3 16:28:01 | 显示全部楼层 |阅读模式
1鱼币
本人写了一个简单的字符串处理程序,包含两个子函数,但是其中第二个子函数 replaceString(替换字符)运行之后字符串根本没有改变,怀疑是逻辑出错了,但是也找不到具体原因,恳请高手帮忙看一下,谢谢~
  1. #include <stdio.h>
  2. #define N 4
  3. #include <string.h>
  4. #include <malloc.h>

  5. void main(void)
  6. {
  7.     char *p[N];
  8.         char c,d;

  9.         int i=0;

  10.     void maxstring(char **p);
  11.     void replaceString(char **p,char c,char d);


  12.     printf("plese enter %d strings:\n",N);
  13.     for(i=0;i<N;i++)
  14.         {
  15.                 p[i]=(char*)malloc(100*sizeof(char));
  16.                 scanf("%s", p[i]);
  17.         }

  18.     maxstring(p);                               


  19.         printf("please enter the char to be replaced by the second char: \n");
  20.         scanf("%c%c",&c,&d);


  21.         replaceString(p,c,d);
  22. }

  23. void maxstring(char **p)
  24. {   
  25.         int ii;
  26.         char *pp=(char*)malloc(sizeof *pp);

  27.               
  28.     strcpy(pp,*p);//
  29.    
  30.         for(ii=1;ii<N;ii++,p++)
  31.                 if(strcmp(pp,*p)<0)
  32.                         strcpy(pp,*p);
  33.         printf("the maximum string is:\n");
  34.         puts(pp);
  35. }

  36. void replaceString(char **p,char c,char d)  //实现字符d替换字符c
  37. {
  38.         char *q=(char*)malloc(sizeof *p);
  39.         int i,j;

  40.     for(i=0;i<N;i++)
  41.         {
  42.                 for(q=*(p+i),j=0;*q!='\0';q++,j++)
  43.                 {       
  44.                         if(*q==c)
  45.                                 *(*(p+i)+j)=d;
  46.                 }
  47.                 puts(*(p+i));
  48.         }

  49. }
复制代码



小甲鱼最新课程 -> https://ilovefishc.com
发表于 2013-4-3 16:28:02 | 显示全部楼层
  1. #include <stdio.h>
  2. #define N 4
  3. #include <string.h>
  4. #include <malloc.h>

  5. //函数声明最好放在前面
  6. void maxstring(char **p);
  7. void replaceString(char **p,char c,char d);



  8. void main(void)
  9. {
  10.     char *p[N];
  11.     char c,d;

  12.     int i=0;

  13.         printf("plese enter %d strings:\n",N);
  14.         for(i=0;i<N;i++)
  15.         {
  16.                 p[i]=(char*)malloc(100*sizeof(char));
  17.                 gets(p[i]);                //这里最好用gets,scanf会过滤掉空格。
  18.         }

  19.          maxstring(p);                                


  20.     printf("please enter the char to be replaced by the second char: \n");
  21.     scanf("%c %c",&c,&d);//中间留个空格,这样输入时不容易出错。


  22.     replaceString(p,c,d);
  23. }

  24. void maxstring(char **p)
  25. {   
  26.     int ii;
  27.     char *pp=(char*)malloc(sizeof(char)*100);//这里分配的空间最好和上面一样,免得溢出。

  28.            
  29.     strcpy(pp,*p);

  30.     for(ii=1;ii<N;ii++)                                        //这里做了修改
  31.             if(strcmp(pp,p[ii])<0)
  32.                     strcpy(pp,p[ii]);
  33.     printf("the maximum string is:\n");
  34.     puts(pp);
  35. }

  36. void replaceString(char **p,char c,char d)  //实现字符d替换字符c
  37. {
  38.         char *q=(char*)malloc(sizeof *p);
  39.         int i,j;

  40.     for(i=0;i<N;i++)
  41.         {
  42.                 for(q=*(p+i);*q!='\0';q++)
  43.                 {        
  44.                         if(*q==c)
  45.                                *q = d;        //直接把d赋给*q即可。
  46.                 }
  47.                 puts(*(p+i));
  48.         }

  49. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-4-3 17:39:41 | 显示全部楼层
ls正解。我还需继续努力
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-4-3 17:54:29 | 显示全部楼层
本帖最后由 snowy569094559 于 2013-4-3 18:02 编辑

非常感谢,程序修改后运行正常。但是有点不是很明白我之前的程序到底是错在哪里呢?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-4-3 18:08:57 | 显示全部楼层
snowy569094559 发表于 2013-4-3 17:54
非常感谢,程序修改后运行正常。但是有点不是很明白我之前的程序到底是错在哪里呢?

错的地方不止一处,你自己琢磨下吧。。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-4-3 18:29:33 | 显示全部楼层
玩酷子弟lv 发表于 2013-4-3 18:08
错的地方不止一处,你自己琢磨下吧。。

试了一下,分别注释了修改的地方,发现就一个地方导致结果不正确,就是主程序中的scanf("%s", p[i])换成你说的gets(p[i])之后就正常了,这个不改的话,改其它任何地方都不行,而改了这个之后,程序也就正常了。那我就更不解了,scanf只是会过滤掉空格而已,怎么就能导致后面的错误呢?。。。恳请指点~~~
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-4-4 15:42:15 | 显示全部楼层
强烈支持楼主ing……
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2026-2-7 08:14

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表