鱼C论坛

 找回密码
 立即注册
查看: 1337|回复: 1

[已解决]终于又遇到问题了,指针!!!

[复制链接]
发表于 2023-12-6 21:51:03 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
问题:
  1. 设计函数 void delcharfun(char *str,char ch)实现从字符串str中删除指定的字符ch。同一字母的大、小写按不同字符处理。

  2. 函数接口定义:
  3. void delcharfun(char *str,char ch);
  4. 其中 str 和 ch 都是用户传入的参数。 str 为指向待删除数组的指针; ch 指定字符。函数没有返回值。

  5. 裁判测试程序样例:
  6. #include<stdio.h>

  7. void delcharfun(char *str,char ch);

  8. int main()
  9. {
  10.     char    ch,str[110];
  11.    
  12.     scanf("%s",str);    //读入字符串
  13.     getchar();            //读取回车符号
  14.     scanf("%c",&ch);    //读入字符
  15.     delcharfun(str,ch);    //删除
  16.     printf("%s\n",str);    //输出删除后结果
  17.     return 0;   
  18. }

  19. /* 请在这里填写答案 */
  20. 输入样例:
  21. abcABCabc#
  22. b

  23. 输出样例:
  24. acABCac#
复制代码


我的程序简直依托答辩
  1. #include<stdio.h>

  2. void delcharfun(char *str,char ch);

  3. int main()
  4. {
  5.     char    ch,str[110];
  6.    
  7.     scanf("%s",str);   
  8.     getchar();      
  9.     scanf("%c",&ch);   
  10.     delcharfun(str,ch);   
  11.     printf("%s\n",str);   
  12.     return 0;   
  13. }

  14. void delcharfun(char *str,char ch)
  15. {
  16.         char *i = str,*p = str,*m = str,*o = str;
  17.         char n;
  18.        
  19.         for(;*i != 0;i++)
  20.         {
  21.                 if(*i == ch)
  22.                 {
  23.                         p = i;
  24.                         for(;p != m;p--)
  25.                         {
  26.                                 n = *p
  27.                                 *p = *(p-1);
  28.                                 *(p-1) = n;
  29.                         }
  30.                 }
  31.         }
  32.        
  33.         i = str;
  34.        
  35.         while(1)
  36.         {
  37.                 if(*(i+1) == ch)
  38.                 {
  39.                                 p = i;
  40.                         for(;p != m-1;p--)
  41.                         {
  42.                                 o = p;
  43.                                 for(;*(o+1) != 0;o++)
  44.                                 {
  45.                                         n = *o;
  46.                                         *o = *(o+1);
  47.                                         *(o+1) = n;
  48.                                 }
  49.                         }
  50.                         break;
  51.                 }
  52.                 i++;
  53.         }
复制代码
最佳答案
2023-12-6 21:51:36
你的程序基本上是正确的,只是有一些小错误需要修正。

首先,在主函数中,你声明了`ch`和`str`为字符类型,但是在`scanf`函数中使用了`%s`格式来读取字符数组`str`,这是不正确的。应该将`str`声明为字符数组类型,如`char str[100]`。另外,使用`getchar`函数读取回车符号是多余的,直接读取一个字符即可。

其次,在函数`delcharfun`中,第一次循环删除指定字符的部分写得非常复杂,可以简化为只需找到指定字符的位置,并将该位置后面的字符依次向前移动一位即可,无需交换字符位置。另外,第二个循环也可以简化,只需找到下一个指定字符的位置,然后将该位置前面的字符依次向后移动一位即可。

修正后的代码如下:
  1. #include <stdio.h>
  2. void delcharfun(char *str, char ch);
  3. int main()
  4. {
  5.     char ch, str[100];
  6.     scanf("%s", str);
  7.     scanf(" %c", &ch);
  8.     delcharfun(str, ch);
  9.     printf("%s\n", str);
  10.     return 0;
  11. }
  12. void delcharfun(char *str, char ch)
  13. {
  14.     char *p = str, *q = str;
  15.     while (*q != '\0') {
  16.         if (*q != ch) {
  17.             *p = *q;
  18.             p++;
  19.         }
  20.         q++;
  21.     }
  22.     *p = '\0';
  23. }
复制代码

这样就可以正确地删除指定的字符了。希望可以帮到你!

以上回复来自 -- ChatGPT(FishC官方接口),如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-12-6 21:51:36 | 显示全部楼层    本楼为最佳答案   
你的程序基本上是正确的,只是有一些小错误需要修正。

首先,在主函数中,你声明了`ch`和`str`为字符类型,但是在`scanf`函数中使用了`%s`格式来读取字符数组`str`,这是不正确的。应该将`str`声明为字符数组类型,如`char str[100]`。另外,使用`getchar`函数读取回车符号是多余的,直接读取一个字符即可。

其次,在函数`delcharfun`中,第一次循环删除指定字符的部分写得非常复杂,可以简化为只需找到指定字符的位置,并将该位置后面的字符依次向前移动一位即可,无需交换字符位置。另外,第二个循环也可以简化,只需找到下一个指定字符的位置,然后将该位置前面的字符依次向后移动一位即可。

修正后的代码如下:
  1. #include <stdio.h>
  2. void delcharfun(char *str, char ch);
  3. int main()
  4. {
  5.     char ch, str[100];
  6.     scanf("%s", str);
  7.     scanf(" %c", &ch);
  8.     delcharfun(str, ch);
  9.     printf("%s\n", str);
  10.     return 0;
  11. }
  12. void delcharfun(char *str, char ch)
  13. {
  14.     char *p = str, *q = str;
  15.     while (*q != '\0') {
  16.         if (*q != ch) {
  17.             *p = *q;
  18.             p++;
  19.         }
  20.         q++;
  21.     }
  22.     *p = '\0';
  23. }
复制代码

这样就可以正确地删除指定的字符了。希望可以帮到你!

以上回复来自 -- ChatGPT(FishC官方接口),如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-19 21:03

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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