实现字符串的查找和替换 分类: c/c++ 2014-10-09 22:33 469人阅读 评论(0) 收藏
在字符串中查找目标字符串并将其替换为指定字符串,返回替换的次数。接口为
int find_str_replace(char *&str,const char *find_str,const char *replace_str)
将str中所有find_str替换为replace_str。要求不利用STL,c实现代码如下:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
//查找str从fromwhere开始第一次出现sub_str的位置
int find(const char *str,const char *sub_str,int fromwhere)
{
int len=strlen(str);
int len_f=strlen(sub_str);
for(int i=fromwhere;i<len&&len-i>=len_f;i++)
{
int k=i;
int j=0;
while(j<len_f)
{
if(str[k]==sub_str[j])
{
k++;
j++;
}
else
break;
}
if(j==len_f)
{
return i;
}
}
return -1;
}
//替换fromwhere处的find_str为replace_str
void replace(char *&str,const char *find_str,const char *replace_str,int fromwhere)
{
int len=strlen(str);
int len_f=strlen(find_str);
int len_r=strlen(replace_str);
char *p=(char*)malloc(len+len_r-len_f);
memset(p,0,len+len_r-len_f);
strncpy(p,str,fromwhere);
strcat(p,replace_str);
strcat(p,str+fromwhere+len_f);
str=p;
}
//在str中将所有find_str替换为repalce_str;
int find_str_replace(char *&str,const char *find_str,const char *replace_str)
{
int num=0;
int len=strlen(str);
int len_r=strlen(replace_str);
int k=0;
while(k<len)
{
int pos=find(str,find_str,k);
if(pos==-1)break;
else
{
replace(str,find_str,replace_str,pos);
k=pos+len_r;
num++;
}
}
return num;
}
int main()
{
char *a="123456783450987634243453";
char *b="345";
char *c="ABCD";
int num=find_str_replace(a,b,c);
printf("%s\n",a);
printf("%d",num);
return 0;
}
若使用c++并利用STL,代码极其简单:
#include<iostream>
#include<string>
using namespace std;
int find_str_replace(string &str,string find_str,string replace_str)
{
int num=0;
int len_f=find_str.length();
int len_r=replace_str.length();
int pos=str.find(find_str,0);
while(pos!=string::npos)
{
str.replace(str.begin()+pos,str.begin()+pos+len_f,replace_str);
pos=pos+len_r;
pos=str.find(find_str,pos);
num++;
}
return num;
}
int main()
{
string a="123456783450987634243453";
string b="345";
string c="ABCD";
int num=find_str_replace(a,b,c);
printf("%s\n",a.c_str());
printf("%d",num);
return 0;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。
实现字符串的查找和替换 分类: c/c++ 2014-10-09 22:33 469人阅读 评论(0) 收藏的更多相关文章
- 1.PHP站内搜索 分类: PHP开发实例 2015-07-31 22:48 4人阅读 评论(0) 收藏
PHP站内搜索:多关键字.加亮显示 1.SQL语句中的模糊查找 $sql = "SELECT * FROM `message` WHERE `content`like '%$k[0]%' a ...
- android开发之broadcast学习笔记 分类: android 学习笔记 2015-07-19 16:33 32人阅读 评论(0) 收藏
android中的广播用的太多了,今天稍微总结一下. 按注册方式分为两种: 1.静态注册广播: 静态注册广播就是在androidManifest.xml文件中注册广播,假设我们要实现这样一个效果,在一 ...
- 修改android应用包名 分类: android 学习笔记 2015-07-16 22:48 4人阅读 评论(0) 收藏
由于项目需要,要修改已经开发好的应用包名,这本身很简单,但是如果你没找到门道,可能会白白浪费许多时间. 修改包名有三个地方要改,这三个地方的修改一定要按顺序来,否则你可能会遇到许多不必要的麻烦. 1. ...
- UI基础:视图控制器.屏幕旋转.MVC 分类: iOS学习-UI 2015-07-02 22:21 62人阅读 评论(0) 收藏
UIViewController 视图控制器,继承自UIResponder,作用:管理视图并且响应事件 功能: 1.分担APPdelegate的工作 2.实现模块独立,能提高复用性 创建UIViewC ...
- 使用JavaScriptSerializer序列化集合、字典、数组、DataTable为JSON字符串 分类: 前端 数据格式 JSON 2014-10-30 14:08 169人阅读 评论(0) 收藏
一.JSON简介 JSON(JavaScript Object Notation,JavaScript对象表示法)是一种轻量级的数据交换格式. JSON是"名值对"的集合.结构由大 ...
- 递归查找无效的符号链接 分类: linux c/c++ 2014-06-02 00:14 345人阅读 评论(0) 收藏
本程序实现在指定目录下递归查找无效的符号链接. 1.设计思路 逐个读取给定目录中的目录项,判断类型 (1)若为目录,则读取该目录中的目录项并判断类型: (2)若为链接文件,则读取出其指向文件的名称(绝 ...
- 全方位分析Objcetive-C Runtime 分类: ios技术 2015-03-11 22:29 77人阅读 评论(0) 收藏
本文详细整理了 Cocoa 的 Runtime 系统的知识,它使得 Objective-C 如虎添翼,具备了灵活的动态特性,使这门古老的语言焕发生机.主要内容如下: 引言 简介 与Runtime交互 ...
- C/C++文字常量与常变量的概念与区别 分类: C/C++ 2015-06-10 22:56 111人阅读 评论(0) 收藏
以下代码使用平台是Windows 64bits+VS2012. 在C/C++编程时,经常遇到以下几个概念:常量.文字常量.符号常量.字面常量.常变量.字符串常量和字符常量,网上博客资料也是千篇千律,不 ...
- 基于命令行编译打包phonegap for android应用 分类: Android Phonegap 2015-05-10 10:33 73人阅读 评论(0) 收藏
也许你习惯了使用Eclipse编译和打包Android应用.不过,对于使用html5+js开发的phonegap应用,本文建议你抛弃Eclipse,改为使用命令行模式,绝对的快速和方便. 一直以来,E ...
随机推荐
- 对dispatch_async到主线程的逻辑封装成C/C++接口类型
背景:代码里面有时候会把将要运行的内容放到主线程里面运行,但假设已经是主线程里面的代码调用dispatch_async的时候偶尔会出现crash,所以就须要推断是否已经在主线程里面了. 通常的做法类似 ...
- 用Visual Studio高版本号打开低版本号的project,转换时出现错误:fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏
解决方法是: 在电脑里面搜索发现 C:\Program Files\Microsoft Visual Studio 10.0\VC\bin C:\Windows\winsxs\x86_netf ...
- WEKA简单介绍与资源汇总
简单介绍 Weka是一个开源的数据挖掘软件,里面集成了很多经典的机器学习算法,在高校和科研机构中受到了广泛的应用. 具体的简单介绍和简单的使用请參考文档:<使用Weka进行数据挖掘>. 学 ...
- 轻量级批量Omnitty工具安装和简单使用
一.Omnitty简单介绍 在实际工作需要同时对多台docker进行批量处理,为了节省时间,这个运维轻量级工具解决此问题 二.Omnitty简单按照 下载需要安装包和依赖包: omnitty-0.3. ...
- android动画具体解释四 创建动画
使用ValueAnimator进行动画 通过指定一些int, float或color等类型的值的集合.ValueAnimator 使你能够对这些类型的值进行动画.你需通过调用ValueAnimator ...
- Bean Query 第一个版本号(1.0.0)已公布
BeanQuery 是一个把对象转换为Map的Java工具库. 支持选择Bean中的一些属性.对结果进行排序和依照条件查询. 不只能够作用于顶层对象,也能够作用于子对象.很多其它具体的介绍能够看我的博 ...
- 2016/3/31 ①全选时 下面选项全选中 ② 下面不选中时 全选取消 ③在“” 中 转义字符的使用\ onclick=\"Checkpa(this,'flall')\"; ④区别于分别实现 重点在于两种情况合并实现
testxuanbuxuan.php <!DOCTYPE html> <html lang="en"> <head> <meta char ...
- POJ2289 Jamie's Contact Groups —— 二分图多重匹配/最大流 + 二分
题目链接:https://vjudge.net/problem/POJ-2289 Jamie's Contact Groups Time Limit: 7000MS Memory Limit: 6 ...
- ToolBar修改返回按钮图标
使用Toolbar时,有时因为不同的手机设备,不能使用系统默认的主题样式或者图标,必须指定特定的资源,防止APP在不同设备上的效果不一样! 我在使用Toolbar时,把这个布局作为一个公共的了,所以修 ...
- TibetanFont | ཡིག་གཟུགས། | 藏文字体
1.Microsoft Himalaya 微软喜马拉雅字体 2007年1月30日,微软公司向全球市场同步发布了其最新操作系统Windows Vista,并自带藏文字体和输入法,Windows Vist ...