在字符串中查找目标字符串并将其替换为指定字符串,返回替换的次数。接口为

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. 1.PHP站内搜索 分类: PHP开发实例 2015-07-31 22:48 4人阅读 评论(0) 收藏

    PHP站内搜索:多关键字.加亮显示 1.SQL语句中的模糊查找 $sql = "SELECT * FROM `message` WHERE `content`like '%$k[0]%' a ...

  2. android开发之broadcast学习笔记 分类: android 学习笔记 2015-07-19 16:33 32人阅读 评论(0) 收藏

    android中的广播用的太多了,今天稍微总结一下. 按注册方式分为两种: 1.静态注册广播: 静态注册广播就是在androidManifest.xml文件中注册广播,假设我们要实现这样一个效果,在一 ...

  3. 修改android应用包名 分类: android 学习笔记 2015-07-16 22:48 4人阅读 评论(0) 收藏

    由于项目需要,要修改已经开发好的应用包名,这本身很简单,但是如果你没找到门道,可能会白白浪费许多时间. 修改包名有三个地方要改,这三个地方的修改一定要按顺序来,否则你可能会遇到许多不必要的麻烦. 1. ...

  4. UI基础:视图控制器.屏幕旋转.MVC 分类: iOS学习-UI 2015-07-02 22:21 62人阅读 评论(0) 收藏

    UIViewController 视图控制器,继承自UIResponder,作用:管理视图并且响应事件 功能: 1.分担APPdelegate的工作 2.实现模块独立,能提高复用性 创建UIViewC ...

  5. 使用JavaScriptSerializer序列化集合、字典、数组、DataTable为JSON字符串 分类: 前端 数据格式 JSON 2014-10-30 14:08 169人阅读 评论(0) 收藏

    一.JSON简介 JSON(JavaScript Object Notation,JavaScript对象表示法)是一种轻量级的数据交换格式. JSON是"名值对"的集合.结构由大 ...

  6. 递归查找无效的符号链接 分类: linux c/c++ 2014-06-02 00:14 345人阅读 评论(0) 收藏

    本程序实现在指定目录下递归查找无效的符号链接. 1.设计思路 逐个读取给定目录中的目录项,判断类型 (1)若为目录,则读取该目录中的目录项并判断类型: (2)若为链接文件,则读取出其指向文件的名称(绝 ...

  7. 全方位分析Objcetive-C Runtime 分类: ios技术 2015-03-11 22:29 77人阅读 评论(0) 收藏

    本文详细整理了 Cocoa 的 Runtime 系统的知识,它使得 Objective-C 如虎添翼,具备了灵活的动态特性,使这门古老的语言焕发生机.主要内容如下: 引言 简介 与Runtime交互 ...

  8. C/C++文字常量与常变量的概念与区别 分类: C/C++ 2015-06-10 22:56 111人阅读 评论(0) 收藏

    以下代码使用平台是Windows 64bits+VS2012. 在C/C++编程时,经常遇到以下几个概念:常量.文字常量.符号常量.字面常量.常变量.字符串常量和字符常量,网上博客资料也是千篇千律,不 ...

  9. 基于命令行编译打包phonegap for android应用 分类: Android Phonegap 2015-05-10 10:33 73人阅读 评论(0) 收藏

    也许你习惯了使用Eclipse编译和打包Android应用.不过,对于使用html5+js开发的phonegap应用,本文建议你抛弃Eclipse,改为使用命令行模式,绝对的快速和方便. 一直以来,E ...

随机推荐

  1. 【Nginx】基本数据结构

    整型的封装 typedef intptr_t ngx_int _t;//有符号整型 typedef uintptr_t ngx_uint_t;//无符号整型 字符串的封装 typedef struct ...

  2. 【python】urllib2

    urllib2.urlopen(url[, data][, timeout]) 请求url,获得请求数据,url参数可以是个String,也可以是个Request参数 没有data参数时为GET请求, ...

  3. [Angular] Refactor Angular Component State Logic into Directives

    Allow the base toggle to be a tag (<toggle>) or attribute (<div toggle>). The <toggle ...

  4. 微信小程序 项目实战(三)list 列表页 及 item 详情页

    1.项目结构 2.list 列表页 (1)数据(逻辑) list.js // pages/list/list.js Page({ /** * 页面的初始数据 */ data: { title: '加载 ...

  5. C#趣味程序---百鸡百钱

    问题:公鸡一仅仅5元,母鸡一仅仅3元,小鸡三仅仅1元.问100元能够买多少仅仅鸡? using System; namespace ConsoleApplication1 { class Progra ...

  6. Linux环境搭建:1. 安装VMware

    我家淘宝店,主要协助同学做毕业设计:https://shop104550034.taobao.com/?spm=2013.1.1000126.d21.pPCzDZ 1. 下载VMware 能够到我的3 ...

  7. Oracle可插拔数据库的jdbc连接串写法

    我在服务器上部署某个第三方系统的数据库的时候,服务器数据库版本为oracle 12c.我采用的方式是新建了一个实例.访问正常. 后来项目的负责人告诉我,oracle12C支持所谓的可插拔数据库.可插拔 ...

  8. Koa2学习(五)中间件

    Koa2学习(五)中间件 Koa2通过app.use(function)方法来注册中间件. 所有的http请求都会依次调用app.use()方法,所以中间件的使用顺序非常重要. 中间件的执行顺序 官方 ...

  9. DataTables warning requested unknown parameter

    This is possibly the most cryptic warning message that DataTables will show. It is a short error mes ...

  10. Delphi指向函数指针的指针

    type TFunc=procedure; procedure MyFunc; begin ShowMessage('Run my func'); end; procedure TForm1.Butt ...