void split( char **arr, char *str, const char *del)//字符分割函数的简单定义和实现
{
char *s =NULL
s=strtok(str,del)
while(s != NULL)
{
*arr++ = s
s = strtok(NULL,del)
}
}
int main()
{
int i
char *myArray[4]
char s[] = "张三$|男$|济南$|大专学历$|"
memset(myArray, 0x0, sizeof(myArray))
split(myArray, s, "$|")
for (i=0i<4i++)
{
printf("%s\n", myArray[i])
}
return 0
}
如果是从输入读,那不用存字符串,直接存数组就好了比如scanf(“%d,%d....”,a,a+1,a+2...)如果已经是字符串了,比如str,那么用sscanf比如sscanf(str,“%d,%d....”,a,a+1,a+2...)void * Split(const char * pString ,int length){
char * ptr=NULL
int rows//一组等宽字符串可以看做二维数组的一行,定义行数
const char *pSrc=pString//取原地址作为源指针
char *pTag//目标指针
//分割长度小于等于0,或指针无效时,返回空指针。
if (pString && length>0 )
{
int len=strlen(pString)
int cols//列数
rows=len/length//字符串总长除以列数
if (len%length>0)rows++//如果余数非0,则行数加一
ptr=new char[rows*(length+1)]//创建足够的空间
pTag=ptr//初始化目标指针
while (*pSrc!='\0')//源指针指向的值如果有效则循环
{
cols=strlen(pSrc)//取原指针开始的字符串长度
if (cols>length)cols=length//如果大于分割长度则修正,否则即为余数,就是最后一行的列数
memcpy(pTag,pSrc,cols)//复制
pTag+=length//目标指针递增一个列宽(行宽度)
*pTag='\0'//填写结束符
pTag++//增补一个地址
pSrc+=cols//源指针递增一个列宽(行宽度)
}
}
return ptr
}
//主函数
int _tmain(int argc, _TCHAR* argv[])
{
char *str="abcdefghijklmn"
char (*p)[4]
p=(char (*)[4])Split(str,3)
cout<<p[1]<<endl
getchar()
return 0
}