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.
char *strtok_s( char *strToken, const char *strDelimit, char **context);
#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);
Routine | Required Header | Compatibility |
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.LIB | Single thread static library, retail version |
LIBCMT.LIB | Multithread static library, retail version |
MSVCRT.LIB | Import 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.