实现字符串的查找和替换 分类: 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 ...
随机推荐
- 【转】AOP
原文:http://blog.csdn.net/zhoudaxia/article/details/38502347 .---------------------------------------- ...
- centos 7 samba 回收站
vim /etc/samba/smb.conf其中添加 #==================================vfs object = recyclerecycle:repositor ...
- 运行计划中cost计算方法
概念: blevel:二元高度=索引高度-1 clustering_factor:集群因子,通过索引扫面得出的要查询table的blocks数量,clustering_factor接近table的bl ...
- iOS 获取手机 唯一标识
存贮在keychainQuery 可以统计用户使用情况 -(void)gatherMessage{ //采集用户设备信息 NSUserDefaults *userDefaults=[NSUserDef ...
- PHP swfupload图片上传实例
swfupload已经是第二次研究,这次自已整了个简单demo,无奈菜鸟最杯… PHP代码如下: if (isset($_FILES["Filedata"]) || !is_upl ...
- url加密并计算时间
将URL地址参数进行加密传输提高网站安全性 加密算法,直接调用就好 function keyED($txt,$encrypt_key){ $encrypt_key = md5($encrypt_key ...
- ExtJs布局中,控件如何水平居中?
如此即可,有图有代码有j8: var formGridHead = Ext.create('Ext.form.Panel', { id: 'MyGridHead', region: 'north', ...
- Linux Find Out Last System Reboot Time and Date Command 登录安全 开关机 记录 帐号审计 历史记录命令条数
Linux Find Out Last System Reboot Time and Date Command - nixCraft https://www.cyberciti.biz/tips/li ...
- 算法4-10:BST平衡二叉树的删除操作
偷懒方法 public void delete(Key key) { insert(key, null); } 这样的方法就是将key相应的值覆盖成null.当读取该键值的时候将会返回null. 这是 ...
- 一步一步学Silverlight 2系列(1):创建一个基本的Silverlight应用
概述 Silverlight 2 Beta 1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,如支持框架语言Visual Basic, Visual C#, IronRuby, ...