有关把字窜按分隔符转换成数组的问题.

klggg klggg 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
先见代码....
在BCB里调试通过.
void free_array(char** Value,int len)
{
for(int i=0;i<len;i++)
{
delete[] Value[i];
}
delete[] Value;
}
//---------------------------------------------------------------------------


/*
separator
要被分离的字窜
split_char
以什么符号进行分离
array_len
返回的数组个数
Exp:
char **mytest;
int array_len;
mytest=ExplodeStr("aaa,bbb,ccc",',',array_len);
for(int i=0;i<array_len;i++)
{
Application->MessageBoxA(mytest[i],"提示信息",0);
}
free_array(mytest,array_len);
*/
char ** ExplodeStr(char* separator,char split_char,int &array_len)
{
/*
1.先得到总维数,然后初始化双重指针
2.切割出每一段字符窜,保存
*/
char **return_array;
char *p; //字符窜指针,指向要分离的字窜
int separator_len=strlen(separator); //字符窜总长度
array_len=0; //保存数组总维数

//得到总共有几维
for(int i=0;i<separator_len;i++)
{
if(separator[i]==split_char) //找到一个
{
array_len++;
}
}
array_len++; //最后是以\0结属也算一维
return_array= new char *[array_len];

p=separator;
int tmp_array=0;
int tmp_len;
for(int i=0;i<separator_len;i++)
{
if(separator[i]==split_char) //找到一个
{
tmp_len=&separator[i]-p; //得到要被切的字符窜长度
p[tmp_len]='\0'; //设置指针字窜结束点
return_array[tmp_array]= new char [tmp_len+1]; //分配内存
strcpy(return_array[tmp_array],p);
p[tmp_len]=split_char; //恢复
p=&separator[i+1]; //指向新位置
tmp_array++;
}
}
return_array[tmp_array]= new char [strlen(p)+1]; //分配内存
strcpy(return_array[tmp_array],p);
return return_array;
}

----------------------------------------------
这里
1.
char ** ExplodeStr(char* separator,char split_char,int &array_len)
我想 char **str; 类型的变量,能不能直接得到其有几个维数?
我目前还不知道单纯根据 char **str 就用统计出一共有几维
的方法。所以只能传递一个引用整形变量了。
2.
我里把字符窜循环了两边,第一边循环单单只是为了得到将被切割后共总有几维,好为
char ** 预先分配内存空间,但总感觉这段的循环很是浪费,特别在字窜长的时候,大
家帮我看看有没什么办法避免.
另这段程序在指针运用上是否存在什么问题?
谢谢!
...全文

相关推荐

评论 6
收藏 已收藏
分享
返回顶部
klggg
C语言 70,039 成员 243,237 内容