`
dewei
  • 浏览: 164683 次
  • 性别: 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++ 中的字符串操作函数进行整理,总结了多种字符串操作函数的用途、函数定义、返回值、附加说明和范例。 1. bcmp() - 比较内存内容 函数定义:`int bcmp(const void *s1, ...

    c++字符串加密解密

    学习了C++中的字符串加密解密后,可以进一步研究其他加密算法,如AES、RSA等,或者了解非对称加密和哈希函数等信息安全相关的概念和技术。此外,也可以尝试将加密解密技术应用到实际项目中,如网络通信的安全传输、...

    用C++实现字符串倒序

    本篇将详细探讨如何使用C++实现字符串的倒序,以及相关的C++字符串操作知识。 首先,我们要理解C++中字符串的基本概念。在C++中,字符串通常由字符数组表示,可以使用`char`类型的数组或`std::string`类来处理。`...

    数据结构 C++ 字符串 7个操作的基本实现

    通过深入学习这些基本操作,开发者可以熟练掌握C++中的字符串处理,这对于编写高效、可靠的代码至关重要。这些操作是C++编程中不可或缺的部分,尤其在处理文本数据、文件读写以及与用户交互的场景下。

    C++字符串处理系统

    根据给定的文件信息,我们可以总结出以下有关“C++字符串处理系统”的详细知识点: ### 一、项目背景与目标 #### 1.1 课题描述 本项目旨在使用C++语言开发一个字符串处理系统,该系统具备多种功能,包括但不限于:...

    C++字符串完全指南

    `std::string`提供了丰富的接口和功能,可以方便地进行字符串操作。 - **BSTR**: 这是在COM编程中常见的字符串类型,通常用于存储宽字符(Unicode)字符串。BSTR是由ActiveX Data Objects (ADO)和OLE自动化等技术...

    C++字符串完全指南.rar_C 字符串_字符串_字符串操作_读字符串

    这篇“C++字符串完全指南”深入浅出地介绍了C++中处理字符串的方法,是初学者不可多得的学习资源。下面我们将详细探讨C++中的字符串概念、字符串操作以及如何读取字符串。 1. **C++字符串基础** 在C++中,字符串是...

    C++字符串处理类库及范例

    在C++编程中,字符串处理是一项至关重要的任务,它涉及到数据的输入、输出以及操作。C++标准库提供了丰富的...通过学习和使用这个库,开发者可以提升其在C++字符串处理方面的技能,从而编写出更高效、更简洁的代码。

    c++ 字符串分割util

    通过分析和使用`split.cpp`和`split.h`,我们可以学习如何在C++中高效地处理字符串,这对于编写涉及大量字符串操作的程序非常有帮助。这个实用工具可能包含了多种字符串处理策略,能够适应各种复杂的分割需求,使得...

    用c++比较两个字符串的大小

    - 可以考虑使用`std::string`类替代字符数组,这样可以避免硬编码字符串最大长度,并提供更丰富的字符串操作方法。 - 使用`strcmp`函数可以简化字符串比较的过程。 #### 总结 通过本文的学习,我们了解到如何...

    C++ 字符串匹配

    总之,C++字符串匹配结合KMP算法可以提供高效且灵活的文本处理能力,而模糊匹配的实现则进一步增强了其实用性。理解并熟练掌握这一技术,对提升C++编程技能大有裨益。通过实践和调试StringMatch这个项目,开发者可以...

    用c++编译 字符串类的实现 源代码

    分析这个源代码,我们可以学习到如何在C++中有效地管理内存,如何处理字符串的边界条件,以及如何优化字符串操作的性能。此外,如果源码中包含测试用例,那么还可以看到这些操作在实际场景中的应用。 总的来说,这...

    C++课程设计 —— 字符串操作

    通过本案例的学习,我们可以深入了解如何在C++中实现字符串操作的各种功能。这不仅有助于提升我们在实际项目中的开发效率,还能让我们更好地理解C++语言的强大之处。希望通过对FString类的学习,大家能够掌握更多...

    c++字符串处理汇总

    在C++编程语言中,字符串处理是至关重要的一个部分,涉及到很多函数和...以上是C++字符串处理的基础知识,实际编程中还会遇到更多复杂情况,如宽字符、多字节字符集、正则表达式等,这些都需要根据具体需求学习和掌握。

    C++字符串函数_C++_

    了解并熟练使用这些C++字符串函数,能让你在编写涉及字符串处理的代码时更加高效和安全。通过深入学习和实践,你将能够更好地应对各种字符串相关的编程挑战。在实际开发中,结合C++标准库提供的其他容器和算法,如`...

    C++字符串教程

    二、字符串操作 1. 连接(concatenation):使用`+`运算符或`append()`函数可以将两个字符串合并。例如,`std::string s1 = "Hello, "; s1 += "World!";` 或 `s1.append("World!");`。 2. 访问字符:可以通过索引...

    字符串操作函数大全(String)

    字符串操作函数大全(String) 在 C 语言中,字符串操作函数是非常重要的一部分,它们被广泛应用于各种编程领域。今天,我们将对字符串操作...通过学习这些函数,我们可以更好地掌握字符串操作的技巧,提高编程效率。

    C++字符串查找

    总之,C++中的字符串查找是编程基础的重要组成部分,学习并精通这些技巧将对你的编程生涯大有裨益。无论是进行简单的文本处理,还是复杂的算法设计,理解和应用字符串查找都能提升你的编程效率和代码质量。

    C++字符串类代码Cstring

    在C++编程中,字符串处理是一项重要的任务,而C++字符串类`std::string`是进行文本操作的主要工具。这个类提供了丰富的成员函数,使得在C++中处理字符串变得非常方便。本文将深入探讨`std::string`类,以及如何在...

    c++数据结构字符串程序

    压缩包中的"String"文件可能包含了实现这些操作的具体代码,进一步学习这个程序可以加深对C++字符串操作的理解。在实际编程中,掌握这些基本操作有助于编写高效、可靠的代码,解决各种字符串处理问题。在数据结构和...

Global site tag (gtag.js) - Google Analytics