终于又遇到问题了,指针!!!
问题:设计函数 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++;
} 你的程序基本上是正确的,只是有一些小错误需要修正。
首先,在主函数中,你声明了`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]