删除指定字符,用指针的形式实现,c语言,通俗易懂

#include<stdio.h>//标准的输入和输出流
#include<stdlib.h>//system("pause")要用
char* func1(char str[],char ch);//具体实现的函数,注意返回值是一个char*的
int main(void)//车主函数
{
	char str[99];//定义一个长度为99的字符串数组
	char* str1 = '\0', * str2 = 'p';//定义两个指向字符串的指针,
	//至于为什么要赋初值,因为指针的指向是不定的,
	//可能会指向内存当中一块不允许指向的区域,
	//也可能会指向内存当中有数据的地方,而这快区域是不允许我们引用的
	//所以我们在定义的时候就必须初始化,防止野指针的出现
	char ch;//定义一个字符
	printf("请输入一串字符串\n");//提示用户输入相应信息
	scanf_s("%s", str, 99);//将用户刚刚输入到缓冲区的信息读入
	getchar();//将缓冲区的换行符读入,便于之后会出现错误,
	//因为后续在读入字符的时候如果不用这个函数的话,
	//就会将缓冲区的换行符读入,而不会将缓冲区的我们想要删除的字符读入
	printf("请输入你要删除的字符\n");//提示用户输入相应信息
	ch = getchar();//读入缓冲区的字符,也可以用scanf的形式进行读入
	str1 = func1(str,ch);//调用函数,删除指定的字符,返回删除只当字符后剩余的字符串
	printf("删除后的字符串为%s\n", str1);//打印输出删除指定字符后的字符串
	system("pause");//将黑色窗口停留,用户按任意键后才会退出
	return 0;//程序正常运行要返回一个0
}
char* func1(char str1[], char ch)
{

	char* p = str1;
	char* str2 = malloc(100);//注意在被调用函数要返回
	//一空间是必须要用malloc来开辟空间,如果不开辟空间,
	//那么在返回函数值的时候,该内存空间被释放,就不能得到
	//我们处理后的值了
	//要不就在主函数中传递参数进去
	if (str2 == NULL)
	{//注意在堆区开辟内存空间的时候一定要先判断是否申请到空间了,
		//如果没有申请到空间,那么malloc函数会返回一个NULL,
		//我们必须要先判断该指针是否申请到空间,因为c语言是不允许我们操作空指针的
		printf("分配内存失败\n");//用于提示用户:申请空间失败
	}
	else
	{
		int j = 0;//进去这条分支说明指针在堆区已经分配到了内存空间了
		while (*p != '\0')//直到指针所指向的那个元素是串结束符,就结束循环条件,退出循环
		{
			if (*p != ch)//p是一个执行字符串的指针,*p是对他解引用的形式,
				//代表字符串中的某个字符
			{
				*(str2+j)= *p;//如果原先的字符串中的某个字符与我们待删除的字符不同,
				//即不是我们想要删除的字符,就将该字符保存到一个新的字符串数组里面
				j++;//注意每进行一次,j一定要++,因为要向后移动一位
			}
			p++;//该指向原先的那个字符串的指针向后移动一位,在进行比较,
			//比较原先的字符串中的下一个字符与我们待删除的字符是否相同
		}
		*(str2+j) = '\0';//注意字符串要在末尾加一个串结束符
		return str2;//将我们删除的字符后的字符串进行返回
	}
}
  • 7
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值