输入一个正整数 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);
struct zifu
{
char* Str;
};
main()
{
int repeat,i;
char a;
scanf("%d",&repeat);
struct zifu str[repeat];
for(i=0;i<repeat;i++)
{
scanf("%s",str[i].Str);
scanf("%c",&a);
delchar(str[i].Str,a);
}
for(i=0;i<repeat;i++)
{
printf("%s\n",str[i].Str);
}
}
void delchar(char* str,char c)
{
int i=sizeof(str),j;
int count=0;
for(j=0;j<i;j++)
{
if(*(str+j)==c)
{
for(int k=j;k<i-count;k++)
{
*(str+k)=*(str+k+1);
}
count++;
}
}
}
哪里错了........
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <strings.h>
void rm(char *p ,char *q)
{ char *str=p,*c=p;
while (*p++!='\0')
{ if(*p==*q && *(p+1)==*(q+1))
{ str=p;
p=p+2;
while(*p!='\0')
{*str=*p;
p++;
str++;
}
*str='\0';
p=c;
}
}
}
int main()
{
char buf[20],s[5];
gets(buf);
gets(s);
rm(buf,s);
printf("%s\n",buf);
}
扩展资料:
数组
如果一个变量名后面跟着一个有数字的中括号,这个声明就是数组声明。字符串也是一种数组。它们以ASCII的NULL作为数组的结束。要特别注意的是,方括内的索引值是从0算起的。
指针
如果一个变量声明时在前面使用 * 号,表明这是个指针型变量。换句话说,该变量存储一个地址,而 *(此处特指单目运算符 * ,下同。C语言中另有 双目运算符 *) 则是取内容操作符,意思是取这个内存地址里存储的内容。
指针是 C 语言区别于其他同时代高级语言的主要特征之一。
指针不仅可以是变量的地址,还可以是数组、数组元素、函数的地址。通过指针作为形式参数可以在函数的调用过程得到一个以上的返回值,不同于return(z)这样的仅能得到一个返回值。
指针是一把双刃剑,许多操作可以通过指针自然的表达,但是不正确的或者过分的使用指针又会给程序带来大量潜在的错误。
字符串
C语言的字符串其实就是以'\0'字符结尾的char型数组,使用字符型并不需要引用库,但是使用字符串就需要C标准库里面的一些用于对字符串进行操作的函数。
它们不同于字符数组。使用这些函数需要引用头文件<string.h>。
参考资料来源:百度百科——C语言