在字符串S1中删除字符串S2中所包含的字符
/*************************************************************************
> File Name: test.c
> Author: ToLiMit
> Mail: 348958453@qq.com
> Created Time: Sun 04 Jan 2015 06:20:05 PM PST
************************************************************************/ #include<stdio.h> void delete_str_char (char * main_str, char * sub_str)
{
if ((main_str == NULL) || (sub_str == NULL))
return; char * sub_index = sub_str;
char * main_index = main_str;
char bitmap[] = {};
char * str = (char *)malloc (strlen (main_str) + );
char * index = str;
memset (str, , strlen (main_str) + ); while (*sub_index != '\0') {
char suffix = ((*sub_index) / ) - ;
char offset = (*sub_index) % ; bitmap[suffix] |= (0x1 << ( - offset));
sub_index++;
} while (*main_index != '\0') {
char suffix = ((*main_index) / ) - ;
char offset = (*main_index) % ; if ((bitmap[suffix] & (0x1 << ( - offset))) == ) {
*index = *main_index;
index++;
}
main_index++;
} *index = '\0';
memcpy (main_str, str, strlen (str) + );
free (str);
return;
} int main (int argc, char * argv[])
{
char test[] = "aabcdaaaaabcaacb"; delete_str_char (test, "bcd");
printf ("%s\n", test);
return ;
}
1. 用bitmap标记sub_str中出现过的字符
2. 申请一段buffer, 长度与main_str一致
3. 遍历main_str, 如果字符没有出现在bitmap中, 就将字符写入到buffer中
4. 遍历结束后, buffer中的数据就是删掉了sub_str中出现过的数据
时间复杂度: O(n + m) n为main_str长度, m为sub_str长度
空间复杂度: O(n)
在字符串S1中删除字符串S2中所包含的字符的更多相关文章
- PHP程序中删除字符串最后一个字符的三种方法
常见的语法格式: foreach ($arr as $key => $value) {$arr_str = $arr['x_id'] . ',' . $arr_str;} 假设字符数组 $arr ...
- JS中删除字符串中的空格
问题描述: 在进行字符串操作时,由于字符串中存在较多的空格,因此需要考虑取消字符串中的空格 问题解决: (1)删除字符串中的前导空格(字符串的前面的空格): 注意:这里使用 ...
- 在字符串S1中删除字符串S2中所包含的字符【转】
转自:http://www.cnblogs.com/tolimit/p/4202959.html /************************************************** ...
- C#中删除字符串最后一个字符的几种方法
转载地址 偶然看到的,记录一下,以免忘记 字符串:string s = "1,2,3,4,5," 目标:删除最后一个 "," 方法: 1.用的最多的是Su ...
- SQL中删除同一字段中重复的值
/////////////////////目地:ZDJZ_DIS中 name字段有重复的值,删除重复的值 DELETE * FROM ZDJZ_DIS WHERE NAME IN (select NA ...
- C#的Winform中OpenFileDialog对话框Filter属性设置包含特定字符,使用正则表达式
OpenFileDialog对话框的Filter属性说明: 首先观察Filter属性的组成部分:“Word文件|*.doc ”,前面的“Word文件”成为标签,是一个可读的字符串,可以自定定义,“|* ...
- lua 中string字符串的使用(string.len, string.char)
table.keys 返回指定表格中的全部键. 格式: keys = table.keys(表格对象) 使用方法演示样例: local t = {a = 1, b = 2, c = 3} local ...
- linux中删除文件内空白行的几种方法。
linux中删除文件内空白行的几种方法 有时你可能需要在 Linux 中删除某个文件中的空行.如果是的,你可以使用下面方法中的其中一个.有很多方法可以做到,但我在这里只是列举一些简单的方法. 你可能已 ...
- Sql Server删除数据表中重复记录 三种方法
本文介绍了Sql Server数据库中删除数据表中重复记录的方法. [项目]数据库中users表,包含u_name,u_pwd两个字段,其中u_name存在重复项,现在要实现把重复的项删除![分析]1 ...
随机推荐
- Python脚本控制的WebDriver 常用操作 <九> 定位一组对象
下面将使用WebDriver来模拟操作定位一组对象的操作 测试用例场景 从上一节的例子中可以看出,webdriver可以很方便的使用find_element方法来定位某个特定的对象,不过有时候我们却需 ...
- apache 403错
<Directory />Options FollowSymLinksAllowOverride NoneOrder deny,allowAllow from all</Direct ...
- rails的字符编码
想练练手,随意的写了个登陆页面,简单的只有几行. <%= form_tag('login_check') do -%><%= text_field_tag 'user_name', ...
- flask 开发记录
from flask import request 判断method方式 request.method 'POST', ‘GET’ 获取form内容 request.form['form_name' ...
- c++编程规范的纲要和记录
这是一本好书, 可以让你认清自己对C++的掌握程度.看完之后,给自己打分,我对C++了解多少? 答案是不足20分.对于我自己是理所当然的问题, 就不提了, 记一些有启发的条目和细节: (*号表示不能完 ...
- 从此不再惧怕URI编码:JavaScript及C# URI编码详解
混乱的URI编码 JavaScript中编码有三种方法:escape.encodeURI.encodeURIComponent C#中编码主要方法:HttpUtility.UrlEncode.Serv ...
- maven学习手记 - 1
学习目标 windows下安装maven环境: 使用命令创建maven项目结构: maven项目编译测试打包安装运行: 在maven项目中使用插件. 在windows下安装maven环境 在win ...
- 5 给我们的c#程序添加注释
注释是你的程序中的一个重要部分.在程序中添加注释是用来告诉你和其他人你的程序是做什么用的,你的思路是怎样的.注释可以用你熟悉的中文进行添加. 当你想暂时把你程序中的某些语句去掉的时候,不需要把他们删除 ...
- ASP.NET&AJAX&JSON - 动态读取数据
因为之前帮WM组做了一个delivery的dashboard,大概用了3周的时间,.net也忘了差不多了,ajax和highchart表也是现学的,蛮费劲!总算也搞出来了.发帖纪录一下. 1. 前台A ...
- 【转载】如何在FPGA设计环境中添加加时序约束
转自:http://bbs.ednchina.com/BLOG_ARTICLE_198929.HTM 如何在FPGA设计环境中加时序约束 在给FPGA做逻辑综合和布局布线时,需要在工具中设定时序 ...