×

strtok to strtok函数

strtok(C++ strtok函数)

admin admin 发表于2022-09-02 19:46:25 浏览125 评论0

抢沙发发表评论

本文目录

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;
}

strtok的使用


1. strtok 是要更改原来的值的,也就是说如果你后面还要使用ip的话,就必须在使用之前拷贝一个ip留作他用,如果不再使用ip的话,就不用管这么多了。
2. strtok不是分割每个“.“
char ip = “192..168.0...8...“;
a = strtok(ip, f);
将ip改成 “192\0..168.0...8...“;
b = strtok(NULL, f);
将ip改成 “192\0..168\0.0...8...“;
c = strtok(NULL, f);
将ip改成 “192\0..168\0.0\0...8...“;
d = strtok(NULL, f);
将ip改成 “192\0..168\0.0\0...8\0...“;
最后ip的值就变成“192”了
正常的strtok做法是这样的:

a = strtok(ip, f);
printf(“[%s]“, a);
while (a) {
a = strtok(NULL, f);
if (a) {
printf(“[%s]“, a);
}
}
3. char ip, ip就表示数组的首地址,既然是地址,就不需要再多此一举了

关于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
-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
  */
-to

关于strtok


首先你要明白
char* input = “xxxx“

char input = “xxxx“
是不同的,前者是一个指针,指向一个只读的数据,这些数据是READ ONLY的
后面是一个数组,像char input = “xxxx“是放栈里的,可读可写
然后,strtok这个函数会修改传入的数据,它的原理是找到一个要查找的字符后就填充字符’\0’,如果遇到只读字符串就会崩溃咯
-strtok

C语言中strtok用法


  strtok函数会破坏被分解字符串的完整,调用前和调用后的s已经不一样了。如果要保持原字符串的完整,可以使用strchr和sscanf的组合等。
  strtok是一个线程不安全的函数,因为它使用了静态分配的空间来存储被分割的字符串位置
  线程安全的函数叫strtok_r,ca。
  运用strtok来判断ip或者mac的时候务必要先用其他的方法判断’.’或’:’的个数,因为用strtok截断的话,比如:“192..168.0...8...“这个字符串,strtok只会截取四次,中间的...无论多少都会被当作一个key。
  函数strtok保存string中标记后面的下一个字符的指针,并返回当前标记的指针。
  后面再调用strtok时,第一个参数为NULL,继续将string标记化。NULL参数表示调用strtok继续从string中上次调用 strtok时保存的位置开始标记化。
  如果调用strtok时已经没有标记,则strtok返回NULL。注意strtok修改输入字符串,因此,如果调用strtok之后还要在程序中使用这个字符串,则应复制这个字 符串。
-to

c++中怎么分割字符串之strtok 函数


定义函数:char * strtok(char *s, const char *delim);
函数说明:strtok()用来将字符串分割成一个个片段。参数s 指向欲分割的字符串,参数delim 则为分割字符串,当strtok()在参数s 的字符串中发现到参数delim 的分割字符时则会将该字符改为\0 字符。在第一次调用时,strtok()必需给予参数s 字符串,往后的调用则将参数s 设置成NULL。每次调用成功则返回下一个分割后的字符串指针。
-strtok

strtok函数怎么用啊


其实你输入的是一个字符串,然后程序对输入用strtok解析得到各个坐标
对字符串src
=
“n1,n2,n3,n4“的解析如下
char*
p;
int
x1,
x2,
y1.
y2;
p
=
strtok(src,
“,“);
x1
=
atoi(p);
p
=
strtok(NULL,
“,“);
x2
=
atoi(p);
p
=
strtok(NULL,
“,“);
y1
=
atoi(p);
p
=
strtok(NULL,
“,“);
y2
=
atoi(p);
//看上面应该get
it
了吧
-to

C语言strtok函数使用问题


  strtok函数会破坏被分解字符串的完整,调用前和调用后的s已经不一样了。如果要保持原字符串的完整,可以使用strchr和sscanf的组合等。
  strtok是一个线程不安全的函数,因为它使用了静态分配的空间来存储被分割的字符串位置
  线程安全的函数叫strtok_r,ca。
  运用strtok来判断ip或者mac的时候务必要先用其他的方法判断’.’或’:’的个数,因为用strtok截断的话,比如:“192..168.0...8...“这个字符串,strtok只会截取四次,中间的...无论多少都会被当作一个key。
  函数strtok保存string中标记后面的下一个字符的指针,并返回当前标记的指针。
  后面再调用strtok时,第一个参数为NULL,继续将string标记化。NULL参数表示调用strtok继续从string中上次调用 strtok时保存的位置开始标记化。
  如果调用strtok时已经没有标记,则strtok返回NULL。注意strtok修改输入字符串,因此,如果调用strtok之后还要在程序中使用这个字符串,则应复制这个字 符串。
-to

C语言strtok函数能过滤换行符或者回车符吗


strtok函数能够过滤换行符或者回车符,只要分割字符串delim中包含字符“\n\r“即可。
1、strtok函数:
原型:char *strtok(char s, const char *delim);
功能:将一个字符串分解为一组字符串,s为要分解的字符串,delim为分隔符字符串;
说明:当strtok函数在参数s的字符串中发现参数delim中包含的分割字符时,则会将该字符改为 字符。在第一次调用时,strtok()必需给予参数s字符串,往后的调用则将参数s设置成NULL。每次调用成功则返回指向被分割出片段的指针;
返回值:从字符串s开头开始的一个个被分割的字符串。分割结束时,返回NULL。所有delim中包含的字符都会被滤掉,并将被滤掉的地方设为一处分割的节点;
2、例程:-to

#include《string.h》
#include《stdio.h》
int main(){
    char input=“abc,d,ef,g“;//待分解字符串
    char* delim=“,“;//分隔符字符串
    char* p=strtok(input,delim);//第一次调用strtok
    while(p!=NULL){//当返回值不为NULL时,继续循环
        printf(“%s\n“,p);//输出分解的字符串
        p=strtok(NULL,delim);//继续调用strtok,分解剩下的字符串
    }
    return 0;
}
-strtok