从第一字符串中删除第二个字符串中所有的字符
2013-09-01 02:39 youxin 阅读(2796) 评论(0) 编辑 收藏 举报题目:输入两个字符串,从第一字符串中删除第二个字符串中所有的字符。
例如,输入”They are students.”和”aeiou”,则删除之后的字符串变成”Thy r stdnts.”。
分析:题目可分解为如何判断一个字符串中包含特定字符以及
如何在一个字符串中删除特定字。
判断一个字符串是否包含是定字符,可首先创建一个字符串的Hash表,把字符串中对应的字符对代表的hash元素置为1. 字符参数所代表Hash元素值是为1就表示字符存在。
(这种“字符串hash”的思想要掌握,可以快速在一些字符中查找某个字符)
在一个字符串中删除指定字符,比较好的方法是通过快慢消除法。
具体实现如下:
#include <stdio.h> #define Boolean int #define TRUE 1 #define FALSE 0 int charHash[256] = {0}; void createCharHash(const char *s) { while(*s) { charHash[*s++] = 1; //这里默认会进行integral promotion整形提升,所以不需要显示(int)转化 } } Boolean isContain(char c) { if(charHash[c]) { return TRUE; }else{ return FALSE; } } void delChars(char *str, const char *s)//str是要操作的字符,s是删除字符串 { int i = 0; int j = 0; createCharHash(s); while(str[i]) { if(!isContain(str[i])) { str[j++] = str[i]; } i++; } str[j] = '\0'; } int main(void) { char xie[] = "They are students."; delChars(xie, "aeiou"); printf("result is %s\n",xie); return 0; }
当我在写上面的程序时,代码如下;
char * delChars(char *s,const char* s2) { createTable(s2); char *source=s; int j=0; while(*s) { if(hashTable[*s]==0) { s[j++]=*s; } s++; } s[j]='\0'; }
总是运行错误,debug了好久,终于找出错在哪里了。
s[j++]=*s;
这里错误,我们的j是相对于原来的起点的,这里s已经移动了,不是原来的起点。改正:
void delChars(char *s,const char* s2) { createTable(s2); char *source=s; int j=0; while(*s) { if(hashTable[*s]==0) { //s[j++]=*s 错误 source[j++]=*s; } s++; } source[j]='\0'; }
转自;http://blog.163.com/xie_wenbin613/blog/static/17548909520125133138852/
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
2012-09-01 MySQL数据库在指定位置增加字段
2012-09-01 php插入日期到mysql失败
2012-09-01 mysql 配置和php&mysql乱码问题
2012-09-01 css 文字换行
2012-09-01 CSS Triangle Arrow DIVs tooltilps
2012-09-01 bulletproof ajax 05: hijax
2012-09-01 bulletproof ajax:ajax 载入时显示动画