不枉风来水顺 发表于 2023-12-6 21:51:03

终于又遇到问题了,指针!!!

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

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

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

void delcharfun(char *str,char ch);

int main()
{
    char    ch,str;
   
    scanf("%s",str);    //读入字符串
    getchar();            //读取回车符号
    scanf("%c",&ch);    //读入字符
    delcharfun(str,ch);    //删除
    printf("%s\n",str);    //输出删除后结果
    return 0;   
}

/* 请在这里填写答案 */
输入样例:
abcABCabc#
b

输出样例:
acABCac#

我的程序简直依托答辩{:5_104:}
#include<stdio.h>

void delcharfun(char *str,char ch);

int main()
{
    char    ch,str;
   
    scanf("%s",str);   
    getchar();      
    scanf("%c",&ch);   
    delcharfun(str,ch);   
    printf("%s\n",str);   
    return 0;   
}

void delcharfun(char *str,char ch)
{
        char *i = str,*p = str,*m = str,*o = str;
        char n;
       
        for(;*i != 0;i++)
        {
                if(*i == ch)
                {
                        p = i;
                        for(;p != m;p--)
                        {
                                n = *p
                                *p = *(p-1);
                                *(p-1) = n;
                        }
                }
        }
       
        i = str;
       
        while(1)
        {
                if(*(i+1) == ch)
                {
                                p = i;
                        for(;p != m-1;p--)
                        {
                                o = p;
                                for(;*(o+1) != 0;o++)
                                {
                                        n = *o;
                                        *o = *(o+1);
                                        *(o+1) = n;
                                }
                        }
                        break;
                }
                i++;
        }

FishC_GPT 发表于 2023-12-6 21:51:36

你的程序基本上是正确的,只是有一些小错误需要修正。

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

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

修正后的代码如下:

#include <stdio.h>

void delcharfun(char *str, char ch);

int main()
{
    char ch, str;

    scanf("%s", str);
    scanf(" %c", &ch);
    delcharfun(str, ch);
    printf("%s\n", str);
    return 0;
}

void delcharfun(char *str, char ch)
{
    char *p = str, *q = str;

    while (*q != '\0') {
      if (*q != ch) {
            *p = *q;
            p++;
      }
      q++;
    }
    *p = '\0';
}

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

以上回复来自 -- ChatGPT(FishC官方接口),如未能正确解答您的问题,请继续追问。
页: [1]
查看完整版本: 终于又遇到问题了,指针!!!