/*
src 源字符串的首地址(buf的地址)
div 指定的分割字符
dest 分割后的字串地址集合 地址指向src中对应位置
num 分割后子字符串的个数,输入dest最大个数
*/
int split(char *src,char div,char **dest,int *num)
{
int len = strlen(src);
int tp = 0,i=0,count=0,max=*num;
if(src==NULL || len==0)
return -1;
*dest++ = src;
count++;
for(i=0;i<len;i++)
{
if(src[i] == div)
{
tp = 1;
src[i] = 0;
continue;
}
if(tp ==1)
{
tp = 0;
*dest++ = (char*)(src + i);
if(count<max)count++;
else break;
}
}
// LOG("num=%d ",*num);
*num = count;
return 0;
}
#define IS_SPACE_CHAR(ch) (ch==' ' || ch =='\t' || ch == '\n' || ch == '\v' || ch == '\f' || ch == '\r') ? 1:0
//返回移除头尾空白符的字符串 需要free释放
char *trimmed(char *source)
{
int i=0,j=0;;
char *dest;
int len = strlen(source);
for(i=0;i<len;i++)
{
if(!IS_SPACE_CHAR(source[i]))
{
break;
}
}
for(j=0;j<len;j++)
{
if(!IS_SPACE_CHAR(source[len-j-1]))
{
break;
}
}
if(len < i + j)
{
return NULL;
}
//LOG("len=%d,i=%d,j=%d\n",len,i,j);
dest = malloc(len-i-j+1);
if(dest!=NULL)
{
memcpy(dest,source+i,(len-i-j));
dest[len-i-j]=0;
}
return dest;
}
//原串中间连续的空字符替换为一个 需要free释放
char *simplified(char *source)
{
char *dest;
int len=0,tp=0,i=0,j=0;
char *str = trimmed(source);
if(str == NULL)
{
return NULL;
}
len = strlen(str);
dest = malloc(len+1);
if(dest==NULL)return NULL;
for(i=0;i<len;i++)
{
if(isSpaceChar(str[i]))
{
tp = 1;
continue;
}
if(tp==1)
{
tp = 0;
dest[j++] = ' ';
}
dest[j++] = str[i];
}
dest[j]=0;
free(str);
return dest;
}