c语言strtok的实现
⑴ 怎么用普通C++来实现strtok()呀
给你一个版本,修改下达到自己想要的效果
void test(char * values)
{
char *result;
char *deli = ",; ";
while(result = strtokk(&values, deli)) //注意,values值会修改
{
printf("%s\n", result);
}
}
#include <string.h>
char * strtokk(char **stringp, char * delim)
{
char *res;
if (!stringp || !*stringp || !**stringp)
return (char*)0;
res = *stringp;
while(**stringp && !strchr(delim, **stringp))
++(*stringp);
if (**stringp)
{
**stringp = '\0';
++(*stringp);
}
return res;
}
⑵ c语言 关于strtok函数,求大神!
直接的问题出在这句:
strcpy(str,s2);
strtok返回的指针,指向是str中相对位置;你s2之后,把s2再拷贝会str,这时的str变成了(A,C),而前面的s1指向的是str的相对位置,因此s1的指向,也从原来的(A,B)变成了(A,C),因此后面的结果也变了。
你起码应该引入新变量,char str2[]; 然后
strcpy(str2,s2);
又:strtok会破坏原来的字符串;strcpy不要用在“源”和“目的”重叠的地方(你例子中str和s2就重叠了);后面的strcpy(v1,S5),应该注意检测s5是否为NULL,否则容易出问题;同理strcpy(v2, s6)亦然。
⑶ C语言中strtok用法
你的问题让我研究了一晚上,
也没弄明白,哎,
这个代码太神奇了。
不知道用什么标记了第一个字符指针的起始位置。
⑷ 请问一个C语言中strtok的问题
分隔符只能是一个字节的,"->"中的-和>都被认为是分隔符了
⑸ 我想用c语言中的strtok函数得到一个字符串中由分隔符分割的某些关键字,并处理
通过判断,可以对某些关键字进行处理,但好像没法获得当前是什么分隔符这样的信息。
⑹ c语言 strtok请教
恩, 虽然没有看过strtok的实现
不过下面这个, 即时效果应该相同的(每执行一次函数的效果); 测试代码是直接复制msdn里的, 我只写mytoken
(当然如果你原意给点分的话:p)
#include <stdio.h>
char* MyToken( char *strToken, const char *strDelimit );
int main( void )
{
char string[] = "A string\tof ,,tokens\nand some more tokens";
char seps[] = " ,\t\n";
char *token;
printf( "Tokens:\n" );
// Establish string and get the first token:
token = MyToken( string, 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 = MyToken( NULL, seps ); // C4996
}
}
typedef int BOOL;
#define TRUE 1
#define FALSE 0
BOOL InSide( char c, const char *str )
{
while( 0 != *str )
if( c == *str )
return TRUE;
else
str++;
return FALSE;
}
char* MyToken( char *strToken, const char *strDelimit )
{
static char *strPoint = NULL;
char *strRet;
if( NULL != strToken )
strPoint = strToken;
if( NULL == strPoint )
return NULL;
while( 0 != *strPoint && InSide(*strPoint, strDelimit) )
*strPoint++ = 0;
if( 0 == *strPoint )
return strPoint = NULL;
strRet = strPoint;
while( 0 != *strPoint && !InSide(*strPoint, strDelimit) )
strPoint++;
if( 0 == *strPoint )
strPoint = NULL;
else
*strPoint++ = 0;
return strRet;
}
⑺ 关于c语言字符串中切割函数strtok的用法
strtok()函数并不像你想的那样可以一次切割字串。需要多次循环,第二次时需要用 p = strtok(NULL, " "); 这样的 形式。
void main()
{ char test1[] = "Hello C World";
char *p;
p = strtok(test1, " ");
while(p)
{
printf("%s\n", p);
p = strtok(NULL, " ");
}
return 0;
}
运行结果:
Hello
C
World
⑻ c语言,关于strtok
strtok会修改字符串,将分隔符处的字符换成\0。
你这里对常量字符串调用strtok,所以出错了。
http://www.cplusplus.com/reference/clibrary/cstring/strtok/