`
dewei
  • 浏览: 163095 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

C++ 字符串操作学习

 
阅读更多

为什么std::string 连最常用,最基本的功能也没有呢?简直是让人无语!

标准C++ 字符串处理增强函数:

//标准C++ string 去除首尾空白字符 2012-8-12 By Dewei
static inline void stringTrim(string &str)
{
	//去除左侧空白符  
	for (std::string::iterator iter = str.begin(); iter != str.end(); ++iter) {   
		if (!isspace(static_cast<unsigned char>(*iter))) {  
			str.erase(str.begin(), iter);  
			break;  
		}  
	}  
	//去除右侧空白符  
	for (std::string::reverse_iterator rev_iter = str.rbegin(); rev_iter != str.rend(); ++rev_iter) {   
		if (!isspace(static_cast<unsigned char>(*rev_iter))) {  
			str.erase(rev_iter.base(), str.end());
			break;  
		}  
	}  
}

//用分隔符将数组合并为字符串 2012-8-12 by Dewei 
//用法:typedef vector<string> stringArray;
string implode(string delimter, stringArray& str_array)
{
	string str;
	int num_count = str_array.size();
	for (int i = 0; i < num_count; ++i) {
		if (!str_array[i].empty())
			str.append(str_array[i]);
		if (i < num_count -1)
			str.append(delimter);
	}
	return str;
}
//将字符串转换成数组(支持值为空) 2012-8-12 by Dewei 
//用法:typedef vector<string> stringArray;
void explode(const std::string &delimter, const std::string &str_source, stringArray *str_array)  
{  
	str_array->clear();  
	if (str_source.empty())  
		return;  
	std::string::size_type num_pos = 0, num_last_pos = 0;  
	num_pos = str_source.find(delimter);
	//num_pos != num_last_pos防止delimter为空字符时死循环
	while (std::string::npos != num_pos && num_pos != num_last_pos) {  
		str_array->push_back(str_source.substr(num_last_pos, num_pos - num_last_pos));
		num_last_pos = num_pos + delimter.length();  
		num_pos = str_source.find(delimter, num_last_pos);
	} 
	str_array->push_back(str_source.substr(num_last_pos)); 
}

//标准C++ std::string 仿CString 替换字符串 by Dewei 2012-6-24
//用法:using namespace std;
//source_str = str_replace(oldstr, newstr, source_str);
static inline string str_replace(const string oldstr, const string newstr, string source_str)
{
	string::size_type num_pos = 0;
	num_pos = source_str.find(oldstr);
	while (num_pos != string::npos) {
		source_str.replace(num_pos, oldstr.length(), newstr);
		num_pos = source_str.find(oldstr, num_pos+oldstr.length());
	}
	return source_str;
}

 

 

 

截取指定区域内字符串:

//CString 截取指字区域内字符串 2012-6-6 By Dewei
//CString strSrc(_T("http://download.csdn.net/download/lindao0/242800"));
//CString strNew;	
//strNew = substr(strSrc, "//", "/");
//

CString substr(CString strSrc, const CString strStart, const CString strEnd)
{
	int iStart = 0, iEnd = 0;
	CString sSub = "";
	iStart = strSrc.Find(strStart) + lstrlen(strStart) ;
	if (iStart != -1) {
		sSub =	strSrc.Mid(iStart);
		iEnd = sSub.Find(strEnd);
		if (iEnd != -1)
		{
			sSub = sSub.Left(iEnd);
		}
	}
	return sSub;
}

//标准C++ 截取指字区域内字符串 2012-6-23 By Dewei
#include <string>
/*
 *功能:截取字符串的指定范围内的子串
 *参数:strSrc源字符串,strStart开始字符,strEnd结束字符,keepStart是否保留开始字符,keepEnd是否保留结束字符
 */
std::string substr(const std::string &strSrc, const std::string &strStart, const std::string &strEnd, bool keepStart = false, bool keepEnd = false)  
{  
	if (strStart.empty() || strEnd.empty()) {
		return strSrc;
	}
	std::string::size_type iStart = 0, iEnd = 0;  
	std::string sSub = "";  
	iStart = strSrc.find(strStart); 
	if (std::string::npos != iStart) {  
		if (keepStart) 
			sSub =  strSrc.substr(iStart);  
		else
			sSub =  strSrc.substr(iStart + strStart.length());  
		
		iEnd = sSub.find(strEnd);  
		if (std::string::npos != iEnd) {  
			if (keepEnd)
				return sSub.substr(0, iEnd + strEnd.length());
			else
				return sSub.substr(0, iEnd);
		}  
	}  
	return sSub;  
}

//标准C++ 无返回值 截取指字区域内字符串 2012-6-23 By Dewei
#include <string>
using std::string;

//string strSrc("http://download.csdn.net/download/lindao0/242800");
//char out[1024] = {0};	
//substr(strSrc, "//", "/", out);
//printf("%s", out);
void substr(string &strSrc, const string &strStart, const string &strEnd, char *out)
{
	int iStart = 0, iEnd = 0;
	string sSub = "";
	iStart = strSrc.find(strStart) + strStart.size();
	if (iStart != -1) {
		sSub =	strSrc.substr(iStart);
		iEnd = sSub.find(strEnd);
		if (iEnd != -1) {
			sSub = sSub.substr(0, iEnd);
			strcpy(out, sSub.c_str());
		}
	}
}

 

 

分享到:
评论

相关推荐

    c++字符串操作函数集合整理

    c++字符串操作函数集合整理c++字符串操作函数集合整理

    字符串的三种操作

    提供学习C++字符串的例子,可以对一个字符串进行操作,1得到一个字符串的子串,2将字符串b插入字符串a,3删除字符串a的一部分.

    基于位运算的两种字符串加密解密算法

    位运算即是直接进行二进制位的处理....本文通过介绍位运算符的运算规则及其在字符串加密解密中的应用实例分析,来演示位运算的特殊应用,揭示其在实际程序设计中的作用,从而加深学生对位运算的理解

    字符串去掉空格

    学习C++必经之路,入门级知识总结,笔记本知识概况,走一步再走一步

    [C++算法入门]-两串旋转练习题

    通过这个练习,读者将学习如何在C++中编写代码来判断两个字符串是否是通过旋转得到的,并解决与字符串旋转相关的算法问题。 文档中包含了一系列的练习题,涵盖了字符串旋转的基本概念、实现方法和应用场景。通过...

    C++实现基于Qt的文本编辑器

    内容概要:C++写的实现基于Qt的文本编辑器,有保存文本和载入文本的功能,实现...能学到什么:C++关于字符串的操作和Qt的一些操作,撤销这些功能如何用C++实现 阅读建议:学习的时候结合内容来实践,并调试对应的代码。

    新手学习C++入门资料

    标准C++中的字符串类取代了C标准C函数库头文件中的字符数组处理函数。 C++中用来做控制态输入输出的iostream类库替代了标准C中的stdio函数库。 C++中的try/catch/throw异常处理机制取代了标准C中的setjmp()和...

    数据结构C++ 串的基本操作和BF算法与KMP算法的比较—适合初学者和复习.docx

    以下代码包含一些对字符串的基本操作,并展示了以上两个具体使用例子以及从运行时间上直观看出KMP算法的高效性。以下由C++程序设计语言编写的代码均已通过Dev-C++5.4.0和VS。为了防止误修改,文档已限制编辑(可复制...

    《Qt中的C++技术》

    分析比较了C++标准库、Qt对字符串、数据输入/输出的处理思路;隐式共享与d-pointer技术;函子及其在QTL(Qt Template Library)中的应用,QTL是如何使用模板特化技术优化QList性能的;如何在C++程序中嵌入汇编代码,...

    Visual C++ 2005入门经典--源代码及课后练习答案

    4.1.4 字符数组和字符串处理 147 4.1.5 多维数组 150 4.2 间接数据存取 153 4.2.1 指针的概念 153 4.2.2 声明指针 154 4.2.3 使用指针 155 4.2.4 初始化指针 157 4.2.5 sizeof运算符 162 4.2.6 ...

    学习C++,学习windows/linux编程,学习网络编程,学习reactor模型,自己实现一遍练手;

    学习C++,学习windows/linux编程,学习网络编程,学习reactor模型,自己实现一遍练手; 包含(以下实现是Windows/Linux平台通用的,美名其曰跨平台) 基本工具库: 日志工具(日志优先级、同步日志、异步日志、带...

    基于C++的机房预约系统

    C++机房预约系统实战项目,在linux环境下...还包括字符串的解析操作,解析键值对字符串来完成学生预约信息的显示,对往后学习json字符解析有很大的帮助。项目内容不多 ,一天半看完视频,自己手敲一下估计也很快完事。

    C字符串函数对应的C++ string操作详解

    在本篇文章里小编给大家整理的是一篇关于C字符串函数对应的C++ string操作知识点内容,有兴趣的朋友们学习下。

    77G 22套C语言 C++ 数据结构 程序设计视频课程合集 C丨C++相关学习视频全套视频教程

    MCU_51_指针_数组与字符串指针.mp4 MCU_51_指针与函数参数.mp4 MCU_51_指针变量和指针运算符.mp4 MCU_51_指针数组.mp4 MCU_51_结构.mp4 MCU_51_结构数组_结构与函数.mp4 MCU_51_联合.mp4 PonC_指针和数组-2....

    C++程序设计彻底研究(是code不是书)

    22.3 字符串的更改、清除、剪接与部分复制 22.4 字符串之间的查找和比较 22.5 字符串对象与C.style孚符串的互换 22.6 常犯的错误 22.7 本章重点 22.8 本章练习 第23章 模板类向量和矩阵的定义 23.1 向量 ...

    從新手到高手C++全方位學習

    18.3.2 將string型字符串轉為char型字符串 18.3.3 char型字符串與函數 18.3.4 函數如何返回字符串 18.4 結構體 18.4.1 結構體的賦值 18.4.2 結構體與函數 18.4.3 結構體與string 18.5 string數組與函數 18.6 流的...

    C++/C 数据结构1800题及答案

    数据结构与算法课程内容包括数据结构与抽象数据类型、算法特性及分类、算法效率与度量、线性结构、顺序表、链表、栈与队列、栈与递归、递归转非递归、字符串的存储结构、字符串运算的算法实现、字符串的快速模式匹配...

    C 实现计算机自动重启

    CString对象的连接和格式化字符串 MFC类库详解 C++实现为应用程序添加多语言菜单 C++虚函数机制分析及实现 C++二进制文件读写详细演示 C++ 实现计算机自动重启 C++实现简单的密码输入程序 简单的C++程序注入...

    深入理解C++11:C++11新特性解析与应用

    2748.3.1 字符集、编码和Unicode 2748.3.2 C++11中的Unicode支持 2768.3.3 关于Unicode的库支持 2808.4 原生字符串字面量 2848.5 本章小结 286附录A C++11对其他标准的不兼容项目 287附录B 弃用的特性 294附录C ...

Global site tag (gtag.js) - Google Analytics