【C语言】删除指定字符

前言:在C/C++的学习过程当中一定一定要多刷题,牛客网作为国内内容超级丰富的IT题库,尤其是它的C、C++,有从入门到大厂真题,而且大部分的考试题目也是从中抽取,还有很多面经,推荐大家去牛客网进行刷题练习,点击链接牛客网刷题入口


题目

本题要求实现一个删除字符串中的指定字符的简单函数。

一、裁判测试程序样例:

#include <stdio.h>
#define MAXN 20

void delchar( char *str, char c );
void ReadString( char s[] ); /* 由裁判实现,略去不表 */

int main()
{
    char str[MAXN], c;

    scanf("%c\n", &c);
    ReadString(str);
    delchar(str, c);
    printf("%s\n", str);
    
    return 0;
}

/* 你的代码将被嵌在这里 */

输入样例

a
happy new year

输出样例

hppy new yer

二、学习思路与代码实现

1.思路

(1)首先创建一个字符数组和一个字符分别存储字符串和我们所要删除的指定字符。
(2)输入我们要删除的字符和字符串(这里要注意

(3)我们在裁判测试程序样例中可以看到,最后打印的还是str,即源字符串首元素地址,所以我们要在源字符串上完成删除指定字符。

(4)知道指针和数组的关系,str[i]是指下标为i的元素,*str=str[0]

(5)主要用i和j来实现,str[i]表示未删除指定字符的源字符串,str[j]表示删除指定字符后的字符串,注意这里的虽然用了i,j,但是依然是在同一个地址空间完成删除的,str[i]从首元素开始依次判断,如果不是我们要删除字符,就赋给str[j],直到str[i]指向’\0’,最后再把’\0’赋给str[j],作为字符串结束的标志
(6)注意这个函数的返回值为空

2.代码实现

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
#define MAXN 20
void delchar(char* str, char c)
{
	int i=0;//str[i]表示原来的字符串
	int j=0;//str[j]表示删除指定字符后的字符串
	while (str[i] != '\0')
	{
		//刚开始指针指向原字符串的首元素地址
		//当指针所指向的字符不是我们要删除的字符串时
		//才能让str的空间地址,或者说str所指向的字符等于对应的字符
		if (str[i] != c)
		{
			str[j++] = str[i];//str[j++]也是一直往后走的
		}
		//str[i]依次判断是否为要删除的指定字符,不是就赋给str[j]
		i++;
	}
	//最后一步,将'\0'赋上
	str[j] = str[i];
}
int main()
{
	char str[MAXN], c;
	scanf("%c", &c);
	//读取缓冲区的'\n'
	getchar();
	//之前谈过scanf读入字符串时,遇到空格或'\n'会直接结束
	//所以字符串的读取最好用gets()
	gets(str);
	//删除指定字符的函数
	delchar(str, c);
	//str是删除指定字符后的字符串的首元素地址
	printf("%s\n", str);

	return 0;
}
  • 43
    点赞
  • 211
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 8
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_麦子熟了

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值