这个倒是很顺利就过了,确实用指针去处理字符数组会比较容易,因为不需要用变量去保存上界,遍历字符的时候遇到’\0’自然就结束了,可以用while。
需要注意的是,删除后原来位置的元素发生了改变,所以还要再检查一次当前位置的元素是不是要检查的字符,否则如果有多个连续的关键字,会留下一些没删掉。
#include <stdio.h>
void delcharfun(char *str,char ch);
int main(int argc, char const *argv[])
{
char str[101],ch;
gets(str);
ch=getchar();
delcharfun(str,ch);
puts(str);
return 0;
}
void delcharfun(char *str,char ch)
{
char *p=str,*q;
while(*p!='\0')
{ //用p去遍历字符串中的每个字符
if(*p==ch)
{
q=p;//如果碰到了字符,用q保存p的位置,用q执行数组的元素删除
//不用担心越界,之后的元素都会写成'\0'
while(*q!='\0')
{
*q=*(q+1);
q++;
}
}
if(*p!=ch) p++;//!注意,当前位置的元素会发生改变,还需要再次检查,不能直接跳过
}
}
题目描述
问题描述:
从字符串str中删除指定的字符ch。同一字母的大、小写按不同字符处理。
输入与输出要求:
输入一个长度不超过100的非空字符串与一个字符,代表需要处理的字符串与需要从字符串中删除的字符。其中字符串中不会出现空格、换行符。输出删除指定字符以后的字符串,占一行。如果删除指定字符后字符串变为空串,则直接输出空行。
输入样例
abcABCabc#
b
输出样例
acABCac#