使用连续分隔符和空最后一个字符进行拆分
Split with consecutive delimiters AND empty last character
我目前正在努力使这个拆分函数正常工作。
我需要什么:
该函数必须将包含分隔符 (:)的字符串拆分为一个列表(称为 ListaPos(。
Cadena 是一个使使用字符更容易的类。
例如:
例1(
1:乔希:斯科特::1995:
应添加到列表 (1,乔希,斯科特,@EMPTY@,1995,@EMPTY@(
我当前的函数给了我这个输出:(1,Josh,Scott,@EMPTY@,1995(
例2(
1:迈克::
应添加到列表 (1,迈克,@EMPTY@,@EMPTY@(
我当前的函数给了我这个输出:(1,迈克,@EMPTY@(
以下是目前正在使用的功能:
char* strtok_single(char* str, char const* delims)
{
static char* src = NULL;
char* p, * ret = 0;
if (str != NULL)
src = str;
if (src == NULL)
return NULL;
if ((p = strpbrk(src, delims)) != NULL) {
*p = 0;
ret = src;
src = ++p;
}
else if (*src) {
ret = src;
src = NULL;
}
return ret;
}
ListaPos<Cadena>* Cadena::Split(Cadena& str, const char* delimitador) const {
Cadena empty = Cadena("@EMPTY@", true);
ListaPos<Cadena>* ret = new ListaPosImp<Cadena>();
char* p = strtok_single(str.GetNewCharPtr(), delimitador);
while (p) {
Cadena nueva = Cadena(p, true);
if (nueva == empty)
{
cout << "ERROR: No se puede agregar la tupla, no se puede insertar el dato @EMPTY@.";
delete ret;
return NULL;
}
if (*p) ret->AgregarFin(p);
else ret->AgregarFin("@EMPTY@");
p = strtok_single(NULL, delimitador);
}
return ret;
}
如果您能帮助我实现目标,我将不胜感激。
谢谢大家。
很难理解 Split 函数的作用。尽管如此,函数strtok_single
在这一部分中存在逻辑错误
else if (*src) {
ret = src;
src = NULL;
}
应该有
else
{
ret = src;
src = NULL;
}
这是一个C演示程序(用于演示使用标准C函数strpbrk
没有必要使用C++程序(
#include <stdio.h>
#include <string.h>
char* strtok_single(char* str, char const* delims)
{
static char* src = NULL;
char* p, * ret = 0;
if (str != NULL)
src = str;
if (src == NULL)
return NULL;
if ((p = strpbrk(src, delims)) != NULL) {
*p = 0;
ret = src;
src = ++p;
}
else
{
ret = src;
src = NULL;
}
return ret;
}
int main(void)
{
char s[] = "1:Josh:Scott::1995:";
const char *delim = ":";
for ( char *p = strtok_single( s, delim );
p != NULL;
p = strtok_single( NULL, delim ) )
{
if ( *p ) puts( p );
else puts( "@EMPTY@" );
}
return 0;
}
程序输出为
1
Josh
Scott
@EMPTY@
1995
@EMPTY@
相关文章:
- 如何根据字符拆分字符串
- 使用连续分隔符和空最后一个字符进行拆分
- 拆分字符数组并存储为向量
- 通过拆分字符数组来创建字符串
- 拆分字符串输入并查找字符是否有效
- 通过正则表达式拆分字符串会切断结果的第一个字母
- C++ 如何将字符串拆分为单个字符
- 如何将字符串拆分为一组 3 个字符,它们之间有空格
- C++ 中的解析器/拆分常量字符*
- 将字符拆分为字符数组
- 在独立模式 c++ 中分隔符处拆分字符*
- 如何根据某些字符拆分字符串?经度纬度
- 用C 中的4个字符将字符串拆分
- 在qt中使用'n'字符拆分数据
- 使用向量和字符*拆分实现
- 如何将文本(诗歌)拆分为行(字符串/字符[])并查找每个行的最后一个单词
- 如何使用 c++ win32 API 拆分字符
- 按字符拆分字符串
- 从字符串 c++ 的末尾开始按字符拆分字符串
- 按字符拆分字符串