字符串分隔函数strtok

5 篇文章 0 订阅

strtok  

原型:char  *strtok( char *str,  char *delim );
  

功能: 分解字符串为一组字符串。s为要分解的字符串,delim为分隔符字符串。

           根据delimit中的字符来分割字符串 str。

 

说明: 首次调用时,s指向要分解的字符串的首地址,之后再次调用要把s设成NULL。

          strtok在s中查找包含在delim中的字符并用NULL('')来替换,直到找遍整个字符串。

          所有delim中包含的字符都会被滤掉,并将被滤掉的地方设为一处分割的节点。

          第一次调用strok时,自动去除掉最前面的分隔符.


返回值:从s开头开始的一个个被分割的字符串。字符串不可再分时,即查找不到新的token时(没有被分割的串时)则返回
NULL,否则返回分隔符前的字符串指针.


注意!: 如果当其遇到“/0”(字符串结束符),再调用strtok将返回NULL。

  
例子:
#include<stdio.h>
#include   <string.h>
main() {
   char a[50]="4567898521234951357654",delim[2]="5";
   char *p;
   p=strtok(a, delim);
   while( p ) {
       printf("%s、n", p);
       p=strtok(NULL, delim);
   }
}

输出结果:

4

67898

212349

13

76

4

 

数组a中存储值得变化: 

第一次循环:4 67898521234951357654

第二次循环:4 67898 21234951357654

第三次循环:4 67898 212349 1357654

第四次循环:4 67898 212349 13 7654

第五次循环:4 67898 212349 13 76 4

 

其他的一些方法:1、Split 函数:返回值数组 = Split("字符串","分割符")
                              2、CString   Find,然后截取

 

附录:

以下是msdn中的解释:

函数原型:

char *strtok_s( char *strToken, const char *strDelimit, char **context);

char *_strtok_s_l( char *strToken, const char *strDelimit, char **context, _locale_t locale);

wchar_t *wcstok_s( wchar_t *strToken, const wchar_t *strDelimit, wchar_t **context);

wchar_t *_wcstok_s_l( wchar_t *strToken, const wchar_t *strDelimit, wchar_t **context, _locale_t locale);

unsigned char *_mbstok_s( unsigned char*strToken, const unsigned char *strDelimit, char **context);

unsigned char *_mbstok_s( unsigned char*strToken, const unsigned char *strDelimit, char **context, _locale_t locale);

参数:

strToken  String containing token or tokens.

strDelimit  Set of delimiter characters.

context  Used to store position information between calls tostrtok_s

locale  Locale to use.
Returns a pointer to the next token found in strToken. They return NULL when no more tokens are found. Each call modifies strTokenby substituting a NULL character for each delimiter that is encountered.
 

char *strtok_s( char *strToken, const char *strDelimit, char **context);

例子:
#include<stdio.h>
#include   <string.h>
main() {
       WCHAR *pszResult = NULL;
       WCHAR str[] = L"asd2fghj2kl";
       WCHAR *subStr;
       subStr = wcstok_s(str, _T("2"), &pszResult);
       while (subStr) {
                    printf("%S\n", subStr);
                    subStr = wcstok_s(NULL, _T("2"), &pszResult);
       }
}

输出结果:      pszResult值:

asd                    fghj2kl

fghj                    kl

kl                       (“”)

 

以下是老版本的msdn中的解释:

strtok, wcstok, _mbstok

Find the next token in a string.

char  *strtok( char *strToken,  const char *strDelimit);

wchar_t  *wcstok( wchar_t *strToken,  const wchar_t *strDelimit);

unsigned char *_mbstok( unsigned char*strToken,  const unsigned char *strDelimit);

 

RoutineRequired HeaderCompatibility
strtok<string.h>ANSI, Win 95, Win NT
wcstok<string.h> or <wchar.h>ANSI, Win 95, Win NT
_mbstok<mbstring.h>Win 95, Win NT

For additional compatibility information, see Compatibility in the Introduction.

Libraries

LIBC.LIBSingle thread static library, retail version
LIBCMT.LIBMultithread static library, retail version
MSVCRT.LIBImport library for MSVCRT.DLL, retail version

Return Value

All of these functions return a pointer to the next token found in strToken. They returnNULL when no more tokens are found. Each call modifiesstrToken by substituting a NULL character for each delimiter that is encountered.

Parameters

strToken

String containing token(s)

strDelimit

Set of delimiter characters

Remarks

The strtok function finds the next token in strToken. The set of characters instrDelimit specifies possible delimiters of the token to be found instrToken on the current call.wcstok and_mbstok are wide-character and multibyte-character versions ofstrtok. The arguments and return value ofwcstok are wide-character strings; those of_mbstok are multibyte-character strings. These three functions behave identically otherwise.

 


LPTSTR GetBuffer(int nMinBufLength)
      这个函数是为一个CString对象重新获取其内部字符缓冲区的指针,返回的LPTSTR为非const的,从而允许直接修改CString中的内容。
      GetBuffer(int size)是用来返回一个你所指定大小可写内存的成员方法。

      它和被重载的操作符LPCTSTR还是有点本质区别的,LPCTSTR是直接返回一个只读内存的指针,

       而GetBuffer则是返回一个可以供调用者写入的内存,并且,你可以给定大小。
      GetBuffer()的参数是你需要CString为缓冲区分配的最小长度。如果因为某
些原因,你需要一个可修改的缓冲区来存放1K TCHARs,你需要调GetBuffer(1024)。

      把0作为参数时,GetBuffer()返回的是指向字符串当前内容的指针。

 
ReleaseBuffer
      GetBuffer暴露pData让用户输入;ReleaseBuffer做些扫尾工作,如设置
Length等。

      如果你使用这个指向由GetBuffer所改变返回的字符串内容,那么在你使用CString其他CString方法之前你必须调用ReleaseBuffer。

原型:void ReleaseBuffer( int nNewLength = -1 );

参数:nNewLength

     The new length of the string in characters, not counting a null terminator. If the string is null-terminated, the -1 default value sets theCString size to the current length of the string.


 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值