删除字符串中某些特定的字符
来源:互联网 发布:重庆大学博雅学院 知乎 编辑:程序博客网 时间:2024/05/21 07:46
1. 描述
输入两个字符串,从第一字符串中删除第二个字符串中所有的字符。例如,输入”They are students.”和”aeiou”,则删除之后的第一个字符串变成”Thy r stdnts.”。
2. 思路
字符的个数是有限的(不考虑Unicode字符),一个char型字符为一个字节占八位,共有 2^8 = 256个字符,除去ASCII为零的字符'\0'外共有255个字符,因此可以建立一个字符到相应ASCII的哈希数组。数组初始化为全零。数组的下标为字符的ASCII,要删除的字符对应的ASCII处的的哈希值设为1。
从头扫描字符串,遇见要删除的字符时把字符设成'\0',同时设置一计数器统计删除的字符的次数。
3. 代码
void delChar(char str[], char delchar[]){int ascii[256] = {0}; char2ASCII(ascii, delchar);//时间复杂度为O(strlen(delchar))char *p;int count;for (count = 0, p = str; *p; p++)//时间复杂度为O(strlen(str)){if (ascii[*p]){*p = '\0';count++;}}for (p = str, count += 1; count--; p = p + strlen(p) + 1) //时间复杂度为O(strlen(del)){printf("%s", p);}printf("\n");}
其中建立字符串到相应ASCII的哈希数组的函数如下:
void char2ASCII(int ascii[], char str[]){//ascii[] indices range from 1 to 255memset(ascii, 0, 256);char *p;for (p = str; *p; p++) {ascii[*p] = 1;}}
总的时间复杂度为O(strlen(str) + strlen(del)).
测试如下:
#include <stdio.h>#include <stdlib.h>#include <string.h>void delChar(char str[], char delchar[]);void char2ASCII(int ascii[], char str[]);int main(void){char str[] = "They are students.";char delchar[] = "aeiou";printf("Delete \"%s\" characters from string \"%s\":\n", delchar, str);delChar(str, delchar);return 0;}
输出:
- 删除字符串中某些特定的字符
- 在字符串中删除特定的字符
- 在字符串中删除特定的字符
- 在字符串中删除特定的字符
- 在字符串中删除特定的字符
- 在字符串中删除特定的字符
- 字符串中删除特定的字符
- 在字符串中删除特定的字符
- 在字符串中删除特定的字符
- 在字符串中删除特定的字符
- 在字符串中删除特定的字符
- 在字符串中删除特定的字符
- 在字符串中删除特定的字符
- 在字符串中删除特定的字符
- 在字符串中删除特定的字符
- 在字符串中删除特定的字符
- 在字符串中删除特定的字符
- 在字符串中删除特定的字符
- C#中mysql诡异的Date_format返回base64string的问题
- Linux常用命令
- 滑动条+编辑框用来做用户参数设置界面
- 重写使struts2返回一个字符串,而不是一个页面
- 合并排序
- 删除字符串中某些特定的字符
- PHP 单一入口的特有作用
- 近期学习实验进度表【201208】
- 修改破解MYSQL密码方法大全
- 使用Vitamio打造自己的Android万能播放器(5)——在线播放(播放优酷视频)
- mysql启动错误 错误1067
- 一个小时内学习SQLite数据库
- Delphi Unknown picture file extension (.jpg) 错误提示
- Android模拟器代理设置