|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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++;
- }
复制代码
你的程序基本上是正确的,只是有一些小错误需要修正。
首先,在主函数中,你声明了`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官方接口),如未能正确解答您的问题,请继续追问。
|
|