c语言strtok函数源码(c++里面,函数strtok怎么用)
本文目录
- c++里面,函数strtok怎么用
- C语言strtok函数分割含有空值的字符串
- c语言 strtok请教
- strtok函数的用法详解
- C++ strtok函数
- 10分 c语言 strtok
- C语言从右到左strtok解析字符串
c++里面,函数strtok怎么用
strtok: 分解字符串为一组字符串。s为要分解的字符串,delim为分隔符字符串。首次调用时,s指向要分解的字符串,之后再次调用要把s设成NULL。 功能: 分解字符串为一组字符串。s为要分解的字符串,delim为分隔符字符串。 例如:strtok("abc,def,ghi",","),最后可以分割成为abc def ghi.尤其在点分十进制的IP中提取应用较多。 函数使用: strtok函数会破坏被分解字符串的完整,调用前和调用后的s已经不一样了。如果要保持原字符串的完整,可以使用strchr和sscanf的组合等。 c #include《string.h》 #include《stdio.h》 int main(void) { char input="abc,d"; char*p; /*strtok places a NULL terminator infront of the token,if found*/ p=strtok(input,","); if(p) printf("%s\n",p); /*Asecond call to strtok using a NULL as the first parameter returns a pointer to the character following the token*/ p=strtok(NULL,","); if(p) printf("%s\n",p); return0; } c++ #include《iostream》 #include《cstring》 using namespace std; int main() { char sentence="This is a sentence with 7 tokens"; cout 《《 "The string to be tokenized is:\n" 《《 sentence 《《 "\n\nThe tokens are:\n\n"; char *tokenPtr=strtok(sentence,""); while(tokenPtr!=NULL) { cout《《tokenPtr《《’\n’; tokenPtr=strtok(NULL,""); } //cout 《《 "After strtok,sentence=" 《《 tokenPtr《《endl;return0; } 函数第一次调用需设置两个参数。第一次分割的结果,返回串中第一个 ’,’ 之前的字符串,也就是上面的程序第一次输出abc。 第二次调用该函数strtok(NULL,","),第一个参数设置为NULL。结果返回分割依据后面的字串,即第二次输出d。 strtok是一个线程不安全的函数,因为它使用了静态分配的空间来存储被分割的字符串位置 线程安全的函数叫strtok_r,ca 运用strtok来判断ip或者mac的时候务必要先用其他的方法判断’.’或’:’的个数,因为用strtok截断的话,比如:"192..168.0...8..."这个字符串,strtok只会截取四次,中间的...无论多少都会被当作一个key 其他相关信息 下面的说明摘自于最新的Linux内核2.6.29,说明了这个函数已经不再使用,由速度更快的strsep()代替 /** linux/lib/string.c** Copyright (C) 1991, 1992 Linus Torvalds*//** stupid library routines.. The optimized versions should generally be found * as inline code in 《asm-xx/string.h》 * These are buggy as well.. * * Fri Jun 25 1999, Ingo Oeser 《ioe@informatik.tu-chemnitz.de》 * - Added strsep() which will replace strtok() soon (because strsep() is * reentrant and should be faster). Use only strsep() in new code, please. ** * Sat Feb 09 2002, Jason Thomas 《jason@topic.com.au》, * Matthew Hawkins 《matt@mh.dropbear.id.au》 * - Kissed strtok() goodbye */
C语言strtok函数分割含有空值的字符串
如果你使用 strtok 函数, 那就没办法了.
因为strtok函数里面采用了 strspn()这个函数.
而 strspn 每次都将指针移动到第一个非 "|" 中的字符的位置.
附上源码:
#include 《string.h》static char *olds;#undef strtokchar * strtok (char *s,const char *delim){ char *token; if (s == NULL) s = olds; /* Scan leading delimiters. */ s += strspn (s, delim); //将指针移到第一个非delim中的字符的位置 if (*s == ’\0’) { olds = s; return NULL; } /* Find the end of the token. */ token = s; s = strpbrk (token, delim);// 获取到delimz中字符在字符串s中第一次出现的位置 if (s == NULL) /* This token finishes the string. */ olds = __rawmemchr (token, ’\0’); else { /* Terminate the token and make OLDS point past it. */ *s = ’\0’; olds = s + 1; } return token;}
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; }
strtok函数的用法详解
C 库函数 - strtok() 描述 C 库函数 char *strtok(char *str, const char *delim) 分解字符串 str 为一组字符串,delim 为分隔符。 声明 下面是 strtok() 函数的声明。 char *strtok(char *str, const char *delim)参数 str -- 要被分解成一组小字符串的字符串。 delim -- 包含分隔符的 C 字符串。 返回值 该函数返回被分解的第一个子字符串,如果没有可检索的字符串,则返回一个空指针。 实例 下面的实例演示了 strtok() 函数的用法。 实例 #include #include int main () { char str = “This is - www.runoob.com - website”; const char s = “-”; char *token; /* 获取第一个子字符串 */ token = strtok(str, s); /* 继续获取其他的子字符串 */ while( token != NULL ) { printf( “%s\n”, token ); token = strtok(NULL, s); } return(0); }让我们编译并运行上面的程序,这将产生以下结果: This is www.runoob.com website推荐:《C语言教程》
C++ strtok函数
调用方式 : char *strtok(char *str1, char *str2);说明 : strtok()函数的原型在string.h中功能说明:函数strtok()返回字符串str1中指向一个由str2所指定的字符或者字符串的分隔符的指 针,当没有要返回的分隔符时,就返回一个空指针。函数strtok()实际上修改了有str1指向的字符串。每次找到一个分隔符后,一个空(NULL)就被放到分隔符处,函数用这种方法来连续查找该字符串。例子:#include 《string.h》#include 《stdio.h》int main(){ char *p; char str="This is a test ,and you can use it"; p = strtok(str," "); // 注意,此时得到的 p为指向字符串:"This",即在第一个分隔 符前面的字符串,即每次找到一个分隔符后,一个空(NULL)就被放到分隔符处,所以此时NULL指针指向后面的字符串:"is a test ,and you can use it"。 printf("%s\n",p); // 此时显示:This do { p = strtok(NULL, ","); // NULL 即为上面返回的指针,即字符串: // "is a test ,and you can use it"。 if(p) printf("|%s",p); }while(p); system("pause"); return 0;}
10分 c语言 strtok
原型:char *strtok(char *s, char *delim); 功能:分解字符串为一组字符串。s为要分解的字符串,delim为分隔符字符串。 说明:首次调用时,s指向要分解的字符串,之后再次调用要把s设成NULL。 strtok在s中查找包含在delim中的字符并用NULL(’’)来替换,直到找遍整个字符串。 返回值:从s开头开始的一个个被分割的串。当没有被分割的串时则返回NULL。 所有delim中包含的字符都会被滤掉,并将被滤掉的地方设为一处分割的节点。 #include 《string.h》 #include 《stdio.h》 int main(void) { char input = "abc,d"; char *p; /**/ /* strtok places a NULL terminator in front of the token, if found */ p = strtok(input, ","); if (p) printf("%s\n", p); /**/ /* A second call to strtok using a NULL as the first parameter returns a pointer to the character following the token */ p = strtok(NULL, ","); if (p) printf("%s\n", p); return 0; } 函数第一次调用需设置两个参数。第一次分割的结果,返回串中第一个 ’,’ 之前的字符串,也就是上面的程序第一次输出abc。 第二次调用该函数strtok(NULL,","),第一个参数设置为NULL。结果返回分割依据后面的字串,即第二次输出d。 strtok是一个线程不安全的函数,因为它使用了静态分配的空间来存储被分割的字符串位置 线程安全的函数叫strtok_r,ca 运用strtok来判断ip或者mac的时候务必要先用其他的方法判断’.’或’:’的个数,因为用strtok截断的话,比如:"192..168.0...8..."这个字符串,strtok只会截取四次,中间的...无论多少都会被当作一个key
C语言从右到左strtok解析字符串
最近正好看到字符串处理函数部分,所以答一下,顺便练习。思路是使用字符串数组存储分割后的字符串,知道数组大小,就可以获取最后一个 / 之前的字符串(即倒数第二个数组元素)。C语言中没有string这个类型,要实现字符串数组可以考虑利用指针数组(其实质就是二维字符数组)。下面是一个示例代码: #include 《stdio.h》#include 《stdlib.h》#include 《string.h》 #define LEN 30 //指针数组的大小 int main(void){ char str = "ab/cds/1231/csdf/ae/qdsfa"; char *token = NULL, *p; int i = 0; p = strtok(str, "/"); while ((token = strtok(NULL, "/")) != NULL) p = token; printf("第一个字符串: %s\n第二个字符串: %s\n倒数第二个字符串: %s\n", \ p); return 0;}
更多文章:
mvvm原理面试(Web前端要掌握哪些技能,零基础小白能学前端吗)
2024年7月19日 18:13
显示屏html模式转换(三星711n液晶显示器在开机后总自动转换模式怎么办)
2024年6月21日 13:11
java和python哪个简单(JAVA还是PYTHON学起来简单)
2024年10月6日 12:25
巴菲特还在亏 三季度亏损26亿美元(巴菲特第三季亏损26亿美元:仍在减持比亚迪,他究竟做错了什么)
2024年8月25日 15:45
sqlite数据库管理器(sqlite数据库有啥用数据库是干啥的)
2024年6月11日 04:35
伦勃朗作品犹太新娘(中外美史所有著名画家及其作品 急急急 16号之前回答)
2024年10月19日 05:01
css如何让div滑动显现(css3如何 设置一个div出现滚动条,并设置 样式)
2024年7月13日 11:26
properties数学(.properties文件怎么查询是否有相同name -java语言)
2024年10月12日 19:55
assignfile(Delphi7.0里面常用到的函数,及属性,事件有哪些)
2024年6月26日 02:42
bootstrap复杂表格(bootstrap table轻松实现数据表格)
2024年10月22日 10:45