/* While there are tokens in "string" */ result[k]=token; k++; /* Get next token: */ token = strtok( NULL, seps ); } for(int j=0;j<4;j++) { printf("%s,",result[j]); }}前不久我刚做的,我的程序的功能比你的复杂多了,这个是我把我的程序修改过的,应该可以完成你的要求,你自己再调一下,可能有点小问题,但绝对可以用的。要是不能通过可以给我留言。
然后定义两个pos1和pos2,初始都为0,然后用pos2去定位第一个“-”出现的位置,将pos1和pos2之间的字符拷到str1中,然后pos1=pos2,pos2继续后找,以此类推。
1、获取字符串长度;2、for 循环;3、判断"-"。
先将"-"换成" - "
然后比如这样
char buf[]="lkkd - cd56778 - dfdgg - 3466";
char str1[20];
char str2[20];
char str3[20];
char str4[20];
sscanf(buf,"%s - %s - %s - %s",str1,str2,str3,str4);
sscanf不行,因为如果想扫描字符串的话,必须在格式化串里面指定字符串长度,比如sscanf(buf, "%08s-%02s", str1,str2);
#include <string.h>
int k=0;
void main(){
char string[100]; //= "lkkd - cd56778 - dfdgg - 3466";
char seps[]= "- ";
char *token;
char *result[4];
token = strtok( string, seps );
while( token != NULL )
{
/* While there are tokens in "string" */
result[k]=token;
k++; /* Get next token: */
token = strtok( NULL, seps );
}
for(int j=0;j<4;j++)
{
printf("%s,",result[j]);
}}前不久我刚做的,我的程序的功能比你的复杂多了,这个是我把我的程序修改过的,应该可以完成你的要求,你自己再调一下,可能有点小问题,但绝对可以用的。要是不能通过可以给我留言。
{
int i;
TCHAR *token;
TCHAR **pstr;
TCHAR **ptr;
TCHAR *buffer;
TCHAR *StrPos,*preStrPos;
int iStrLen,iArrCount,iArrSize,isize,spSize,tmpSize;
iStrLen = (int)_tcslen(source)+1;
spSize = (int)_tcslen(seprator);
buffer = new TCHAR [iStrLen];
TCHAR loacalseperator=seprator[0]; _tcscpy_s(buffer,iStrLen,source); // 查找有多少个 *seprator 并且 统计最大长度和个数;
StrPos = buffer;
preStrPos = buffer;
iArrCount =1; // 默认个数为1,长度为 字符串长度
iArrSize = iStrLen;
isize=0; // 开始最小长度 if(spSize!=1)
{
for(i=0;i<iStrLen-1;i++)
{
if(_tcschr(seprator+1,buffer[i]))
{
buffer[i]=seprator[0];
}
}
} while( (StrPos = _tcschr( StrPos,loacalseperator))!=NULL)
{
iArrCount++;
tmpSize = (int)(StrPos-preStrPos);
isize = max(isize, tmpSize);
StrPos+=1;
preStrPos = StrPos;
}
// 最后一个
tmpSize = (int)_tcslen(preStrPos);
isize = max(isize,tmpSize); isize ++ ; //添加一个结束符号
iArrSize = min(iArrSize , isize); *count=0;
pstr=(TCHAR **)malloc(iArrCount*sizeof(TCHAR *));
ptr=pstr; for(i=0;i<iArrCount;i++)
pstr[i]=(TCHAR*)malloc(iArrSize*sizeof(TCHAR)); TCHAR *temptoken=NULL;
token = _tcstok_s(buffer, seprator,&temptoken); if(token!=NULL)
{
_tcscpy_s(*ptr,iArrSize,token);
(*count)++;
*ptr++; while(token!=NULL)
{
token = _tcstok_s(NULL, seprator,&temptoken); if(token!=NULL)
{
_tcscpy_s(*ptr,iArrSize,token);
(*count)++;
*ptr++;
}
}
}
delete []buffer;
if(*count==0)
{
FreeStrings(pstr,iArrCount);
return NULL;
}
else
return pstr;
}//释放内存
void FreeStrings(TCHAR **lpstr, int count)
{
if(lpstr==NULL)
{
return;
} for(int i=0;i<count;i++)
{
if(lpstr[i]!=NULL)
free(lpstr[i]);
} free(lpstr);
}
//用法
TCHAR **strings;
int stringcount;
strings=ExtractStr(tempbuffer,TEXT(","),&stringcount);//strings就是拆分出来的字符串数组,stringcount是拆分出来多少个子串
FreeStrings(strings,stringcount);//释放内存