如何用c语言批量替换字符串,[C/C++]急速批量替换字符串
最近在家自学C++的Windows应用程序编程,本来用Dev c++学习的好好的,一时心血来潮,想独立安装MinGW、用任意编辑器编写代码、手写makefile并自主编译运行,结果麻烦来了,在Dev C++下可以正常编译并运行的代码在MinGW下无法运行了。
主要问题集中在字符串类型的转换和字符替换的问题上。
在网上搜索了一下,先用std::string作为替换和转换的基础,关于LPWSTR和std::string之间的转换把我磨的焦头烂额。后来网上找到一篇文章说用CString和string速度都不快,直接在内存中替换是最快的,代码如下:
void CWebTransfer::Substitute(char *pInput, char *pOutput, char *pSrc, char *pDst)
{
char *pi, *po, *p;
int nSrcLen, nDstLen, nLen;
// 指向输入字符串的游动指针.
pi = pInput;
// 指向输出字符串的游动指针.
po = pOutput;
// 计算被替换串和替换串的长度.
nSrcLen = strlen(pSrc);
nDstLen = strlen(pDst);
// 查找pi指向字符串中第一次出现替换串的位置,并返回指针(找不到则返回null).
p = strstr(pi, pSrc);
if(p)
{
// 找到.
while(p)
{
// 计算被替换串前边字符串的长度.
nLen = (int)(p - pi);
// 复制到输出字符串.
memcpy(po, pi, nLen);
memcpy(po + nLen, pDst, nDstLen);
// 跳过被替换串.
ppi = p + nSrcLen;
// 调整指向输出串的指针位置.
popo = po + nLen + nDstLen;
// 继续查找.
p = strstr(pi, pSrc);
}
// 复制剩余字符串.
strcpy(po, pi);
}
else
{
// 没有找到则原样复制.
strcpy(po, pi);
}
}
因为char*是不推荐使用的,所以我将其改为LPTSTR:
//替换字符串
LPTSTR Substitute(LPTSTR pInput, LPCTSTR pSrc, LPCTSTR pDst) {
LPTSTR pi, p, po, pOutput;
int nSrcLen, nDstLen, nLen, offset=0;
pi = pInput;
// 计算被替换串和替换串的长度.
nSrcLen = strlen(pSrc);
nDstLen = strlen(pDst);
// 查找pi指向字符串中第一次出现替换串的位置,并返回指针(找不到则返回null).
p = strstr(pInput, pSrc);
if(p) {
// 找到.
while(p) {
// 计算被替换串前边字符串的长度.
nLen = (int)(p - pi);
// 将被替换前边字符串复制到输出字符串.
memcpy(po, pi, nLen);
//在被替换字符串的尾部添加要替换的字符串
memcpy(po + nLen, pDst, nDstLen);
//MessageBox(NULL, po, TEXT("error"), MB_OK);
// 跳过被替换串.
pi = p + nSrcLen;
// 调整指向输出串的指针位置.
po = po + nLen + nDstLen;
offset += nLen + nDstLen;
// 继续查找.
p = strstr(pi, pSrc);
}
// 复制剩余字符串.
memcpy(po, pi, strlen(pi));
// 还原位移
pOutput = po-offset;
} else {
// 没有找到则原样复制.
pOutput = pi;
}
return pOutput;
}
使用方法:
LPBYTE lpByte = (LPBYTE)TEXT("阿Q的世界!%1%1%2%1321212");
LPTSTR keyValue, tmp = (LPTSTR)lpByte;
keyValue = Substitute(tmp, TEXT("%1"), TEXT("替换字符"));
MessageBox(NULL, keyValue, TEXT("error"), MB_OK);
如何用c语言批量替换字符串,[C/C++]急速批量替换字符串相关推荐
- C语言怎么把单词拆成字母,如何用C语言切出汉语单词和英语单词混合字符串
我有一个字符串,其中包含UTF-8中的中文和英文单词: char *str = "你a好测b试"; 如果使用strlen(str),它将返回14,因为每个普通话字符使用三个字节,而 ...
- c语言如何用fscanf将字符串读取,在c语言中如何将文本内容 赋给一个 字符串
在c语言中如何将文本内容 赋给一个 字符串 来源:互联网 宽屏版 评论 2009-08-13 04:59:12 分类: 电脑/网络 >> 程序设计 >> 其他编程语言 问题 ...
- c 语言字符串查找替换,c ++ - 如何在标准字符串中搜索/查找和替换?
c ++ - 如何在标准字符串中搜索/查找和替换? 有没有办法用std::string中的另一个字符串替换所有出现的子字符串? 例如: void SomeFunction(std::string&am ...
- c语言字符串中间部分替换,求修改谢谢 把一段字符串后面部分替换掉
#include void fun(char *st,int n,int m) { char *p1,*p; p=st; while(p { p++; p1++; } for(p=st+m;p { * ...
- 如何用C语言写一个web服务器的基础功能
我们都知道,学一门语言,只是单独看了就不写的话是很容易出现眼高手低的,所以,今天摩杜云要给大家分享的内容,就是如何用C语言写一个web服务器的基础功能,希望大家看完有所收获. 服务器架构 目标架构 以 ...
- 如何用C语言改变宏定义的大小,C语言中宏定义使用的小细节
C语言中宏定义使用的小细节 #pragma#pragma 预处理指令详解 在所有的预处理指令中,#Pragma 指令可能是最复杂的了,它的作用是设定编译器的状态或者是指示编译器完成一些特定的动作.#p ...
- C语言怎么实现单词下落,如何用c语言实现单词统计
如何用c语言实现单词统计 输入一串字符串,输出其中有多少个单词. 代码如下:#include #include #define SIZE 20 int main(){ char str[SIZE]={ ...
- 如何用C#语言构造蜘蛛程序
"蜘蛛"(Spider)是Internet上一种很有用的程序,搜索引擎利用蜘蛛程序将Web页面收集到数据库,企业利用蜘蛛程序监视竞争对手的网站并跟踪变动,个人用户用蜘蛛程序下载We ...
- php替换文件中的数据库,批量替换php文件中的class,id的值
批量替换php文件中的class,id的值 $val="wqewq 替换成"wqewq //其实也就是在class,id值后面加上一个字符串 //我要替换的是文件里的.所以要从文件 ...
- 转:如何用C#语言构造蜘蛛程序
如何用C#语言构造蜘蛛程序 "蜘蛛"(Spider)是Internet上一种很有用的程序,搜索引擎利用蜘蛛程序将Web页面收集到数据库,企业利用蜘蛛程序监视竞争对手的网站并跟踪变动 ...
最新文章
- maven笔记(3)
- uva 10256 The Great Divide (Convex Hull, Simple)
- QA:智能布线系统二十问
- 手机广告投放(phone advertising)唯一标识
- 简单明了学习SQL CTE递归查询
- PAT(乙级)1016
- Mysql5.7及以上版本的MySQL下载、安装及配置教程(附图)
- 【Java实例】简单彩票程序
- python 移动平均线_使用python计算简单移动平均线
- kotlin-协成同步
- LWR 局部加权线性回归算法
- 全时定妆精致小欧眉,温柔与酷可以兼得
- 黑猴子的家:Minimal Install VS Server with GUI VS GNOME Desktop
- 青海省国家湿地公园功能区划数数据、全国湿地沼泽分布数据、全国省市县自然保护区
- 基于Levy飞行和FDB的郊狼优化算法(matlab代码实现)
- 华为LACP链路聚合配置
- 扇贝编程可以用c语言吗,扇贝编程手机版下载_扇贝编程app下载 v1.1.41 - 87G手游网...
- Kubernetes调度器源码学习(三):Preempt抢占机制、调度失败与重试处理
- 光纤布线兵法之特色产品(一)
- 请假系统jsp mysql_[源码和文档分享]基于JSP和MYSQL数据库实现的请假管理系统