实现字符串的查找和替换 分类: 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 ...
随机推荐
- 【Nginx】基本数据结构
整型的封装 typedef intptr_t ngx_int _t;//有符号整型 typedef uintptr_t ngx_uint_t;//无符号整型 字符串的封装 typedef struct ...
- 【python】urllib2
urllib2.urlopen(url[, data][, timeout]) 请求url,获得请求数据,url参数可以是个String,也可以是个Request参数 没有data参数时为GET请求, ...
- [Angular] Refactor Angular Component State Logic into Directives
Allow the base toggle to be a tag (<toggle>) or attribute (<div toggle>). The <toggle ...
- 微信小程序 项目实战(三)list 列表页 及 item 详情页
1.项目结构 2.list 列表页 (1)数据(逻辑) list.js // pages/list/list.js Page({ /** * 页面的初始数据 */ data: { title: '加载 ...
- C#趣味程序---百鸡百钱
问题:公鸡一仅仅5元,母鸡一仅仅3元,小鸡三仅仅1元.问100元能够买多少仅仅鸡? using System; namespace ConsoleApplication1 { class Progra ...
- Linux环境搭建:1. 安装VMware
我家淘宝店,主要协助同学做毕业设计:https://shop104550034.taobao.com/?spm=2013.1.1000126.d21.pPCzDZ 1. 下载VMware 能够到我的3 ...
- Oracle可插拔数据库的jdbc连接串写法
我在服务器上部署某个第三方系统的数据库的时候,服务器数据库版本为oracle 12c.我采用的方式是新建了一个实例.访问正常. 后来项目的负责人告诉我,oracle12C支持所谓的可插拔数据库.可插拔 ...
- Koa2学习(五)中间件
Koa2学习(五)中间件 Koa2通过app.use(function)方法来注册中间件. 所有的http请求都会依次调用app.use()方法,所以中间件的使用顺序非常重要. 中间件的执行顺序 官方 ...
- DataTables warning requested unknown parameter
This is possibly the most cryptic warning message that DataTables will show. It is a short error mes ...
- Delphi指向函数指针的指针
type TFunc=procedure; procedure MyFunc; begin ShowMessage('Run my func'); end; procedure TForm1.Butt ...