一个关于特定分隔符分割字符串的有关问题(用strtok并不理想)

一个关于特定分隔符分割字符串的问题(用strtok并不理想)
比如一个字符串
char   GPS_INFO[]= "$GPRMC,112720.000,A,3639.2868,N,11659.8396,E,,,200305,,*12 "
用 ", "为分隔标志将里面的指定参数信息提取出来,C语言怎么实现?

希望以如下函数形式实现
char   *strSplict(char   *str,const   char   *seps,int   pos)
其中str是原字符串,seps为分隔符,pos为指定位置.
比如   info3=strSplict(GPS_INFO, ", ",3)应为 "3639.2868 ";

我尝试过strtok,但很有意思的是遇到 ",,, "这样的空段它自作主张的给去掉了(我的意思是就算空茅坑它也必须得给我留着,好让我跟序号一一对上)

------解决方案--------------------
/*
得到 "| "分割节点值,首位不为 "| "
*/
char *GetSubStr(const char * sBuffer,int iNum)
{
static char srBuffer[10240];
int i=0,j=0,iNo=0;

memset(srBuffer,0,sizeof(srBuffer));
for (i=0; i <strlen(sBuffer); i++)
{
if(i> strlen(sBuffer) || iNo > iNum) break;
if (sBuffer[i] == '| ')
{
iNo++;
continue;
}
else
{
if (iNo == iNum)
{
srBuffer[j] = sBuffer[i];
j++;
}
}
}
return srBuffer;
}
类似的例子.楼主应该可以用的
------解决方案--------------------
花了半个小时研究了一下, 发现用strtok的确不能解决问题,遇到空会跳过,我自己写了一个,自己也测试过了,可以解决问题:

char* strSplict(char *str,const char *seps,int pos)
{
int iLen = 0;
int iStart = 0;
int iEnd = 0;
char* token;
char strText[100];
::memset(strText, 0, sizeof(strText));

if (pos == 0)
{
strcpy(strText, strtok(str, seps));
}
else
{
for (int i = 0; i <strlen(str); ++i)
{
if (str[i] == *seps)
{
iStart = iEnd;
iEnd = i;

if (iLen == pos)
{
if (iEnd-iStart-1 > 0)
{
strncpy(strText, str+iStart+1, iEnd-iStart-1);
}

break;
}

iLen++;
}
}
}


//token = strtok( str, seps ); // C4996
// // Note: strtok is deprecated; consider using strtok_s instead
// while( token != NULL )
// {
// // While there are tokens in "string "
// printf( " %s\n ", token );

// // Get next token:
// token = strtok( NULL, seps ); // C4996
// }


return strText;
}

需要说明的是,其实楼主这种问题可以换一个方式来解决,楼主在给GPS_INFO赋值的时候为什么不把本来是空的地方强制写一个预定值(比如*NULL*),然后用strtok就可以优美的解决了而不用自己写那么多累赘的代码.

//token = strtok( str, seps ); // C4996
// // Note: strtok is deprecated; consider using strtok_s instead
// while( token != NULL )
// {
// // While there are tokens in "string "
// printf( " %s\n ", token );

// // Get next token:
// token = strtok( NULL, seps ); // C4996
// }

------解决方案--------------------
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char * strSplict(const char * str, const char * seps, int pos)
{
int pos1=0,pso2=0,len1=0,len2=0;
int count=0;
if(pos <0)return NULL;
char *ptr,*res;
ptr=str;
while((pos1=strcspn(ptr,seps))!=strlen(ptr))
{
count++;
if(count==pos+1)
{
res=(char*)malloc(pos1+1);
strncpy(res,ptr,pos1);
return res;
}
ptr+=pos1;
ptr+=1;
}

return ( NULL );
}

int main()
{
char *ptr= "$GPRMC,112720.000,A,3639.2868,N,11659.8396,E,,,200305,,*12 ";