字符串按照特定字符进行分割是编程时候经常要用到方法
MFC中CString 和std::string 常可以用 find() + Mid() 的方法来实现
CString实现:
Cpp代码
inline static void split(CString src, CString token, vector<CString>& vect)
{
int nend=0;
int nbegin=0;
while(nend != -1)
{
nend = src.Find(token, nbegin);
if(nend == -1)
vect.push_back(src.Mid(nbegin, src.GetLength()-nbegin));
else
vect.push_back(src.Mid(nbegin, nend-nbegin));
nbegin = nend + 1;
}
}
std::string实现
Cpp代码
inline static void split(std::string src, std::string token, vector<std::string>& vect)
{
int nend=0;
int nbegin=0;
while(nend != -1)
{
nend = src.find_first_of(token, nbegin);
if(nend == -1)
vect.push_back(src.substr(nbegin, src.length()-nbegin));
else
vect.push_back(src.substr(nbegin, nend-nbegin));
nbegin = nend + 1;
}
}
上面2个例子中,分割出来字符串都是重新分配了内存的。
例如CString中Mid()函数就会
CString dest;
AllocCopy(dest, nCount, nFirst, 0); //这个地方将会为 dest分配内存空间
return dest;
所以在负荷较高的运行环境下会频繁的分配小块内存和释放小块内存,比较容易生产内存碎片,而且效率也不高。
潜意识中喜欢追求底层细节,让我想了解 在C语言中 char * 到底是怎么实现分割的?
果不其然C语言中的 strtok() 函数能够实现字符串的分割而且效率超高,不需要对分割后的字符串进行内存分配,而只是将被分割字 符中的 分隔符 ( token ) 以\0代替。而大家都知道 字符串都是以\0结尾的,所以这样就达到了将一个整串分割成多个字符串的目的。
char * 实现:
Cpp代码
inline static void Split(const char* content, const char* token, vector<std::string>& vect)
{
if(content == NULL)
return;
int len = strlen(content);
if(len <= 0)
return;
char* pBuf =(char*)malloc(len+1);
strcpy(pBuf , content);
char* str = strtok(pBuf , token);
while(str != NULL)
{
vect.push_back(str);
str = strtok(NULL, token);
}
free(pBuf);
}
分享到:
相关推荐
本文将深入探讨C/C++实现的BASE64算法,这是一种常见的数据编码方法,用于将二进制数据转换为ASCII字符串,以便在网络上传输或者在文本格式中存储。 首先,我们需要了解BASE64的基本原理。BASE64是一种基于64个字符...
JavaScript(简称JS)正则表达式是编程领域中一种强大的文本处理工具,它在JavaScript语言中扮演着核心角色,用于模式匹配、字符串搜索、替换和提取等操作。本压缩包包含有关JS正则表达式的详细资料,以及一个与JNI...
这通常涉及到字符串分割函数的使用,如strtok(),或者自定义的分割逻辑。此外,题目指出输出字符串的空间已经开辟好,这意味着需要在不改变输入字符串的前提下,在输出字符串上进行操作,这就要求对内存管理有一定...
总的来说,"token字符分隔实验"是一个学习和实践C++字符串处理的好例子,它展示了如何在VS2015环境下利用标准库进行字符分隔。对于想要提升C++编程技能,特别是处理字符串的开发者来说,这个实验是十分有价值的。...
2. **SplitStringArray**:将字符串按指定字符进行分割。 3. **IntersectionCompute**:空间交会计算的核心函数,包括后方交会和前方交会的计算。 4. **LOutOrientationElementCompute** 和 **...
正则表达式是一种模式匹配工具,能够快速有效地查找、替换或分割字符串。在C++中,理解并熟练运用正则表达式可以极大地提高文本处理的效率和灵活性。 1. **基础概念** - **模式**:正则表达式就是一个模式,用于...
接着,它将输入的Base64编码字符串分割成组,每组四个ASCII字符,然后将每组字符转换回三个字节的数据。最后,它将生成的二进制数据返回给调用者。 在示例代码中,使用了一个简单的示例程序来展示Base64加密和解密...
主要步骤包括读入文本文件、字符串分割、数据转换、矩阵赋值等。 2.字符串分割函数SplitString: 该函数用于将输入字符串s根据分隔符c分割成多个子字符串,并将其存储在 vector<string> v 中。该函数的实现方式是...
例如,`insert()`方法可以在指定位置插入文本,`replace()`可以替换指定的子串,`indexOf()`和`lastIndexOf()`用于查找子串的位置,而`split()`则可以依据特定分隔符将字符串分割成多个部分。 除了基本操作,Qt...
3. **字符串处理**:查询单词通常涉及到字符串的处理,如查找、分割、比较等。C++的`std::string`类提供了丰富的字符串操作功能,而正则表达式库(`<regex>`)可用于更复杂的文本匹配。 4. **字典数据结构**:为了...
**题目要求:** 从标准输入读取字符串,字符串间用 `#` 分割,直到遇到结束标记 `"*;."`。对读取的所有字符串按字典序排序,并输出到文件中。同时统计字符串数量、最长和最短字符串。 **解决方案:** 1. **输入处理...
这通常涉及到字符串处理,包括字符串分割、比较等操作。 - **计算相似度**:使用`contrast`函数实现,具体步骤包括: - 将文件中的单词逐个提取并存储到临时字符串变量中。 - 使用`strcmp`函数比较两个字符串是否...
128条码包含三个字符集,A、B和C,每个字符集包含100个不同的字符,从数字0到9,大写字母A到Z,以及一些特殊符号。这种编码方式使得128条码能高效地存储数字、字母和特殊字符,且纠错能力较强。 接下来,我们要在...
3. **分割摩尔斯电码**:由于摩尔斯电码中的字母和单词之间分别使用空格和/进行分隔,我们需要处理这些分隔符,将字符串分割成单个摩尔斯电码。 4. **查找并转换**:遍历摩尔斯电码列表,使用预定义的字典查找对应...
词法分析器的任务是读取源代码字符串,将它们分割成一系列的词素,每个词素对应于程序语言中的一个基本元素,如关键字、标识符、常量、运算符等。LEX工具使用正则表达式来定义这些词素的模式,并根据匹配规则生成...
首先去除所有标点符号和空白字符,然后将字符串分割成数组,遍历数组寻找第一个有效的数字字符串并将其转换为长整型数值。 6. **异常处理与返回值**:在整个过程中,对可能出现的异常进行了捕获处理,并在遇到错误时...
如数学计算中用到的整数和实数,文本编辑所用到的字符串,多媒体程序处理的图形、图像、声音、动画等通过特殊编码定义后的数据。 数据元素:是数据的基本单位,在计算机中通常作为一个整体进行考虑和处理。在有些...
24. **字符串分割**:`split("c")`会根据字符'c'将字符串分割成多个子串,结果数组的长度是4,因为"abccdefcdh"中有3个'c',加上首尾部分。 这些题目涵盖了计算机科学和信息技术的基础知识,对于准备计算机二级等级...
默认值为`CHAR_MAP=CHARZ`,这意味着当从数据库中读取VARCHAR2类型的数据时,会在字符串的末尾添加一个空字符`\0`作为终止符,即使字符串长度小于字段的实际大小。这对于C语言的字符串操作(如`printf`或`strcat`)...
- 这是一个C++编程题目,要求找出以`\0`结束的字符串中最长的连续数字子串的长度,并返回该子串的首地址。通过遍历字符串,判断当前字符是否为数字,更新最大子串长度和起始位置。 7. **New Coke案例**: - 这是...