在字符串中删除特定字符

2023-11-08

 

题目:在字符串中删除特定字符。删除后字符串变为"hi i a",即将原串中包含t、e、s中的都删除掉了。

分析:方法(1):从头扫描原串,每遇到一个字符,在要删的串中比一遍,有的话就删除当前字符,然后继续下一个字符的判断。方法(2):由于方法(1)由三步完成:第一:扫描原串 第二:拿着原串中的字符在要删的串中找一遍第三:找到后删除。方法(2)的思路是优化第二、第三步。第二步我们可以用一个数组exits统计要删的字符有哪些,即拿要删串的每个字符为下标,并将以该下标的元素值置1(如果要删的字符中有a,那么将exits[97]置1,),这样的话扫描原串的时候就不要一遍一遍扫描要删的串了,直接用下标对应的数组元素判断。至于第三步的优化,我们不是找到要删的元素,将后面的移前来,下一次又找到一个要删除的,再将剩下的移前来,这样会导致很多字符要移动很多次,我们可以用两个下标dest,src控制,src负责遍历原串,dest负责指向要留下的,遇到要留下的,src赋给dest,二者都往后移,遇到要删除的,src往后移,dest不动(也就是说,dest放过去的都是要最后留下的,并且这将是每个字符最终应该所在的位置)。

方法(1):

void remove_chars1(char str[],  const char remove[])
{
	assert(str);
	assert(remove);

	int len1 = strlen(str);
	int len2 = strlen(remove);
  
	for (int i = 0; i < len1; i++)
	{
		int j = 0;
		for (j = 0; j < len2; j++)
		{
			if (str[i] == remove[j])
			{
				strcpy(str+i, str  +i+1);
				i--;//当后一个拷前来时,如果不减1的话,上去i++就会跳过当前位置(当前位置就被忽略了)
				break;
			}
		}
	}
}

方法(2):

void remove_chars2(char str[], const char remove[])
{
	int exits[256] = {0};
	
	//将remove数组中的字符作为下标,将exits对应元素置1
	for (int i = 0; remove[i] != '\0'; i++)
	{
		exits[remove[i]] = 1;
	}

	int dest = 0;
	int src = 0;
	while (str[src] != '\0')//遍历原串
	{
		if (exits[str[src]] == 0)//不要删除
		{
			str[dest] = str[src];
			dest++;
		}
		//无论如何src要加加(遍历)
		src++;
	}
	str[dest] = '\0';
}
 
 
 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在字符串中删除特定字符 的相关文章

随机推荐

  • ThinkPHP6 框架 对接 ChatGPT应用

    ThinkPHP6是一款优秀的PHP开发框架 它提供了丰富的功能和易于使用的API 使得开发人员可以快速构建高质量的Web应用程序 本文将介绍如何使用ThinkPHP6框架对接ChatGPT应用 实现智能聊天机器人的功能 首先 我们需要在T
  • 部署mac os渗透测试环境

    一 序言 每次重装系统后配置环境都是需要耗费大量时间 特此写一篇mac os部署渗透测试环境 二 过程 一 系统设置 1 常用设置 SSD 开启 TRIM 支持 sudo trimforce enable APP安装开启任何来源 sudo
  • Lua coroutine.create

    Lua coroutine creat 相当于在C 中使用lua newthread Equivalent of Lua coroutine create in C using lua newthread 问 题 I have a call
  • 基于Qt的OpenGL编程(3.x以上GLSL可编程管线版)---(二十)面剔除

    Vries的教程是我看过的最好的可编程管线OpenGL教程 没有之一 其原地址如下 https learnopengl cn github io 04 20Advanced 20OpenGL 04 20Face 20culling 关于面剔
  • # HTB-Tier2- Vaccine

    HTB Tier2 Vaccine Web Network Vulnerability Assessment Databases Injection Custom Applications Protocols Source Code Ana
  • 毕业设计 基于Arduino的计算器

    0 前言 这两年开始毕业设计和毕业答辩的要求和难度不断提升 传统的毕设题目缺少创新和亮点 往往达不到毕业答辩的要求 这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求 为了大家能够顺利以及最少的精力通过毕设 学长分享优质毕业设计项
  • 暑期实训日志11——webstorm+chrome实时浏览插件

    在网上看到一个webstorm chrome里JetBrains IDE Support能够实现实时浏览的小工具 感觉非常实用 一 JetBrains IDE Support下载 下载地址 直接从谷歌商店下载也可 前提是进得去 下载好后打开
  • sqli-labs(28-28a)

    Less 28 1 测试http 127 0 0 1 sqli labs Less 28 id 1 27 页面回显不正常 但又没有错误提示 报错注入没戏 尝试闭合语句 加单引号回显不正常 说明sql语句闭合至少有 可能有 判断有无 在Les
  • log4cplus基础知识

    一 简介 log4cplus是C 编写的开源的日志系统 具有线程安全 灵活 以及多粒度控制的特点 通过将信息划分优先级使其可以面向程序调试 运行 测试 和维护等全生命周期 你可以选择将信息输出到屏幕 文件 NT event log 甚至是远
  • SSM controller要能跳转页面又要能返回字符串

    SpringMVC因为添加了下面这个bean 视图解析器 当你方法返回的是 json 字符串等其它值时 会404 跳转 jsp jsp页面
  • 回文数的判断

    文章目录 题目 一 方案一 二 方案二 三 方案三 四 方案四 题目 判断一个整数是否是回文数 回文数是指正序 从左向右 和倒序 从右向左 读都是一样的整数 提示 下面案例可供参考 一 方案一 public boolean palindro
  • 二叉树 深度优先搜索(DFS)、广度优先搜索(BFS)

    深度优先搜索算法 Depth First Search DFS是搜索算法的一种 它沿着树的深度遍历树的节点 尽可能深的搜索树的分支 当节点v的所有边都己被探寻过 搜索将回溯到发现节点v的那条边的起始节点 这一过程一直进行到已发现从源节点可达
  • pytorch Embedding模块,自动为文本加载预训练的embedding

    pytorch 提供了一个简便方法torch nn Embedding from pretrained 可以将文本与预训练的embedding对应起来 词 embedding word1 0 2 3 4 word2 1 2 3 4 word
  • Pytorch(六)(模型参数的遍历) —— model.parameters() & model.named_parameters() & model.state_dict()

    神经网络的模型参数 model parameters model named parameters model state dict 这三个方法都可以查看神经网络的参数信息 用于更新参数 或者用于模型的保存 作用都类似 写法略有出入 就以P
  • 爬虫技术研究综述

    爬虫技术研究综述 整理 Ackarlix 挨踢网 中文IT技术社区 http www aitic net 引言 随着网络的迅速发展 万维网成为大量信息的载体 如何有效地提取并利用这些信息成为一个巨大的挑战 搜索引擎 Search Engin
  • react运行项目出现报错:process is not defined

    具体报错效果 导致页面完全不能动弹 点击按钮没有效果 解决方式 首先删除 package lock json 文件夹 然后执行命令 npm install react error overlay 6 0 9 最后重新启动项目
  • End-to-End Object Detection with Transformers[DETR]

    End to End Object Detection with Transformers DETR 背景 概述 相关技术 输入 提取特征 获取position embedding transformer encoder decoder 回
  • C++ 学习笔记(17)tuple类型、bitset类型、随机数(引擎和分布)、IO库(操纵符、未格式化输入输出、随机访问)

    C 学习笔记 17 tuple类型 bitset类型 随机数 引擎和分布 IO库 操纵符 未格式化输入输出 随机访问 参考书籍 C Primer 5th 17 1 tuple 类型 17 1 1 定义和初始化tuple tuple 的构造函
  • 极路由 1s HC5661 玩转 openwrt

    注意 我的极路由1s是老版本的 是不带A的 安装篇 1 安装breed 根据这篇文章安装breed 成功后你就拥有了一台刷不死的路由器 2 下载openwrt系统 在这个网站可以下载 选择HC5661的版本 3 断电 按住reset键 上电
  • 在字符串中删除特定字符

    题目 在字符串中删除特定字符 删除后字符串变为 hi i a 即将原串中包含t e s中的都删除掉了 分析 方法 1 从头扫描原串 每遇到一个字符 在要删的串中比一遍 有的话就删除当前字符 然后继续下一个字符的判断 方法 2 由于方法 1