输入一个正整数 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'都被删除)
我的程序:
#include <stdio.h>
void delchar(char *str,char c);//它的功能是将字符串 str 中出现的所有 c 字符删除
int main()
{
int n=0,repeat;
char s[10][1000]={0},c1[10]={0};
scanf("%d",&repeat);
for(n=0;n<repeat;n++)//循环次数
{
getchar(); //消\n(换行符号)fflush(stdin)
gets(s[n]); c1[n]=getchar(); //或者scanf("%[^\n] %c",&s[n],&c1[n]);
}
for(n=0;n<repeat;n++) //循环次数
delchar(s[n],c1[n]);
return 0;
}
void delchar(char *str,char c)
{
char *p,*q;
for(p=str,q=str;*p != '\0';p++)
if(*p != c)
*q++ = *p;
*q = *p; //把后面的‘\0’赋给q,也是他本身;
printf("result: %s\n",str);
}
第二种方法:(转载https://www.cnblogs.com/hhwcg/p/10693314.html)
#include<stdio.h>
void delchar(char str[],char c);
int main()
{
int repeat;
char str[80],c;
scanf("%d\n",&repeat); //要加换行符
while(repeat--)
{
gets(str); //输入字符串
scanf("%c",&c);
printf("result: ");
delchar(str,c);//调用函数
}
return 0;
}
void delchar(char str[],char c) //str[]相当于*p
{
while(*str!='\0') //不为空字符
{
if(*str!=c) //字符不相等
{
putchar(*str); //输出字符 ,要注意puts()是输出字符串,putchar()是输出一个字符
}
str++; //移动到下一个字符
}
}