鱼C论坛

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

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

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

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

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

x
问题:
设计函数 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[110];
    
    scanf("%s",str);    //读入字符串 
    getchar();            //读取回车符号 
    scanf("%c",&ch);    //读入字符 
    delcharfun(str,ch);    //删除 
    printf("%s\n",str);    //输出删除后结果 
    return 0;    
}

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

输出样例:
acABCac#

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

void delcharfun(char *str,char ch);
 
int main()
{
    char    ch,str[110];
    
    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++;
        }
最佳答案
2023-12-6 21:51:36
你的程序基本上是正确的,只是有一些小错误需要修正。

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

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

修正后的代码如下:
#include <stdio.h>void delcharfun(char *str, char ch);int main(){    char ch, str[100];    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官方接口),如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

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

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

修正后的代码如下:
#include <stdio.h>void delcharfun(char *str, char ch);int main(){    char ch, str[100];    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官方接口),如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-7-9 07:07

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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