输入一个字符串 str,再输入一个字符 c,将字符串 str 中出现的所有字符 c 删除.

输入一个正整数 repeat (0<repeat<10),做 repeat 次下列运算:
输入一个字符串 str,再输入一个字符 c,将字符串 str 中出现的所有字符 c 删除。
要求定义并调用函数delchar(str,c), 它的功能是将字符串 str 中出现的所有 c 字符删除,函数形参str的类型是字符指针,形参c的类型是char,函数类型是void。
输入输出示例:括号内为说明
输入
3 (repeat=3)
happy new year (字符串"happy new year")
a (待删除的字符'a')
bee (字符串"bee")
e (待删除的字符'e')
111211 (字符串"111211")
1 (待删除的字符'1')
输出
result: hppy new yer (字符串"happy new year"中的字符'a'都被删除)
result: b (字符串"bee"中的字符'e'都被删除)
result: 2 (字符串"111211"中的字符'1'都被删除)
关键是删除程序的理解不懂。
1.void delchar(char *str, char c)

{
int i,j;
for (i=j=0;str[i]!='\0';i++)

{ if (str[i]!=c)
str[j++]=str[i];}

str[j]='\0';

}
这段程序的最后三行怎么理解?
2.void delchar(char *str, char c){ char *p,*q;

p=str;

while(*p!='\0')

{ if(*p==c)

{ q=p;

while(*q!='\0')

{ *q=*(q+1); q++;}

*q='\0';

}

if(*p!=c) p++;

}

}

这段我是真心看不懂,指针什么的不是很懂啊。麻烦讲的基础点

void delchar(char *str, char c)

{
int i,j;
for (i=j=0;str[i]!='\0';i++) //循环遍历字符串中的字符

{ if (str[i]!=c) //如果不是特定要删除的字符
str[j++]=str[i];} // 将他们重新保存到str数组中

str[j]='\0'; //加上字符串结束标志

}
2.void delchar(char *str, char c){ char *p,*q;

p=str; //将字符指针赋值给p,p和str同时指向传递过来的字符串

while(*p!='\0') //循环遍历字符数组

{ if(*p==c) //如果找到特定删除的字符

{ q=p; //将此时的指针指向赋值给q

while(*q!='\0') //循环遍历

{ *q=*(q+1); q++;} //将字符后移,覆盖那个那个特定字符,相当于删除该字符

*q='\0'; //字符串结束

}

if(*p!=c) p++; //如果不是,就直接跳过

}

}追问

str[j++]=str[i];} // 将他们重新保存到str数组中 这个是怎么保存的,关于J++和I能说明下吗

追答

额。。。给你举个具体的例子吧。。
假设字符指针 char *str="beef";待删字符是c='e';
if(str[i]!=c) 首先我们看第一次循环,i=0,str[0]='b',不等于'e',str[j++],此时j等于0,把str[0]='b'保留,j再自增1,然后第二第三次循环str[1]和str[2]都等于'e',故if语句块里的内容不执行,直到str[3]='f',不等于'e',此时保存'f'到str[1]中,j再自加,变成2,最后加上字符串结束标志str[2]='\0';这样就把相应的字符去掉了,其实字符串还是原来的字符串,只不过把原来的都覆盖掉了,再加上'\0'后,即使'\0'后面还有字符,也无法输出。。。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-01-26
str = input()
dstr = input()
for i in dstr:
str = str.strip()
i = i.lower()
str = str.replace(i,'')
I = i.upper()
str = str.replace(I,'')
print('result: {}'.format(str))
能不能百度到就看运气了
相似回答