有关把字窜按分隔符转换成数组的问题.
klggg 2003-11-10 05:19:13 先见代码....
在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 ** 预先分配内存空间,但总感觉这段的循环很是浪费,特别在字窜长的时候,大
家帮我看看有没什么办法避免.
另这段程序在指针运用上是否存在什么问题?
谢谢!