zoukankan      html  css  js  c++  java
  • strtok函数()

    函数返回第一个分隔符分隔的子串后,将第一参数设置为NULL,函数将返回剩下的子串

    int main() 
    
    {
    
          char test1[] = "feng,ke,wei";  
    
          char *test2 = "feng,ke,wei";  
    
          char *p;  
    
          p = strtok(test1, ",");
    
          while(p)  
    
              {   
    
                  printf("%s
    ", p);   
    
                  p = strtok(NULL, ",");     
    
              }      
    
          return 0;
    
     }
    运行结果:

    feng

    ke

    wei


    说明:

    函数strtok将字符串分解为一系列标记(token),标记就是一系列用分隔符(delimiting chracter,通常是空格或标点符号)分开的字符。注意,此的标记是由delim分割符分割的字符串喔。

    例如,在一行文本中,每个单词可以作为标记,空格是分隔符。
    需要多次调用strtok才能将字符串分解为标记(假设字符串中包含多个标记)。第一次调用strtok包含两个参数,即要标记化的字符串和包含用来分隔标记的字符的字符串(即分隔符)下列语句: tokenPtr = Strtok(string," ")
    tokenPtr赋给string中第一个标记的指针。strtok的第二个参数””表示string中的标记用空格分开。
    函数strtok搜索string中不是分隔符(空格)的第一个字符,这是第一个标记的开头。然后函数寻找字符串中的下一个分隔符,将其换成null( w)字符,这是当前标记的终点。注意标记的开始于结束。

    函数strtok保存string中标记后面的下一个字符的指针,并返回当前标记的指针。


    后面再调用strtok时,第一个参数为NULL,继续将string标记化。NULL参数表示调用strtok继续从string中上次调用strtok时保存的位置开始标记化。

    如果调用strtok时已经没有标记,则strtok返回NULL注意strtok修改输入字符串,因此,如果调用strtok之后还要在程序中使用这个字符串,则应复制这个字符串。

    但如果用p = strtok(test2, ",")则会出现内存错误。

    原来, 该函数修改了原串

    所以,当使用char*test2 = "feng,ke,wei"作为第一个参数传入时,, 由于test2指向的内容保存在文字常量区,该区的内容是不能修改的,所以会出现内存错误. chartest1[] = "feng,ke,wei" 中的test1指向的内容是保存在栈区的,所以可以修改.。

    另外一个例子:

    #include <iostream>
    using namespace std;

    int main(int argc, char * argv[])
    {
        //时间格式 2010/08/11 10:38:22
        char strEventTime[] = "2010/08/11 10:38:22";
        char *token = NULL;
        
         token = strtok(strEventTime, "/");
        char *year = token;
        if (token != NULL)
        {
            token = strtok(NULL, "/");
        }
        char *month = token;
        if (token != NULL)
        {
            token = strtok(NULL, " ");
        }
        char *day = token;
        if (token != NULL)

        {
            token = strtok(NULL, ":");
        }
        char *hour = token;
        if (token != NULL)
        {
            token = strtok(NULL, ":");
        }
        char *minute = token;

        if (token != NULL)
        {
            token = strtok(NULL, ":");
        }
        char *second = token;

        printf("%s %s %s %s %s %s %s ", year, month, day, hour, minute, second);
        return 0;
    }

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

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

    说明:首次调用时,s必须指向要分解的字符串,随后调用要把s设成NULL。 strtok在s中查找包含在delim中的字符并用NULL('')来替换,直到找遍整个字符串。 返回指向下一个标记串。当没有标记串时则返回空字符NULL。)

                                                                                                                                                                                                                                                       以上为网络搬砖

  • 相关阅读:
    eclipse打包
    java reflect 小例子
    linux查看java jdk安装路径和设置环境变量
    mapreduce (一) 物理图解+逻辑图解
    java url 解码 编码 奇怪的解码两次
    cygwin+hadoop+eclipse (三) 运行wordcount实例
    nutch 与 solr 的结合
    一个项目可以有多个源代码路径
    SHAppBarMessage
    记录系统开机启动登录注销等信息
  • 原文地址:https://www.cnblogs.com/mingrigongchang/p/6246326.html
Copyright © 2011-2022 走看看