精华内容
下载资源
问答
  • //字符串比较函数,两字符串相同就返回1,否则返回0 static int my_strcmp( const char *dest, const char *src, int len) {  int i;  for(i = 0;i  {  if(src[i] != dest[i])  {  
    #include <stdio.h>

    //字符串比较函数,两个字符串相同就返回1,否则返回0
    static int my_strcmp( const char *dest, const char *src, int len)
    {
        int i;
        for(i = 0;i < len; i++)
        {
            if(src[i] != dest[i])
            {
                return(0);
            }
        }
        return(1);
    }


    char *my_strtok(char *str, const char *delim)
    {
        int i = 0;
        int len = strlen(delim);
        char *ret_p;
        char *temp;  //临时变量,用来遍历字符串str
        static char *save_p;  //静态变量用来保存上一次返回地址
        temp = (str == NULL) ? save_p : str;//如果是第一次使用,则从字符串首地址开始查找,否则从上一次返回的地点开始查找
        ret_p = temp; //需要返回的地址


        if(1 == len)   //如果delim只有一个字符,就直接比较,不需调用 my_strcmp函数
        {
            /*****************************************/
         
            while(*temp != '\0')
            {
                if(*delim == *temp)
                {
                    *temp = '\0';  //将字符串从此处"剪断"
                    save_p = ++temp;
                    return(ret_p);
                }
                temp++;
            }
           // return(NULL);
        }


        else   //如果delim有多个个字符,就my_strcmp函数, 这样代码简单
        {
            /******************************************/
            while(*temp != '\0')
            {
                if(my_strcmp(temp,delim,len) == 1)
                {
                    *temp = '\0';
                    save_p = temp + len;
                    return(ret_p);
                }
                temp++;
            }

        }


        return(NULL); //没找到匹配字符或字符串时返回NULL
    }


    int main()
    {
    #if 0
        char src[] = "2016//05//20 11::19::32  \0";                       
        char *str = my_strtok(src,"//");
        printf("%s\n",str);//2016
        str =  my_strtok(NULL,"//");
        printf("%s\n",str);//05
        str =  my_strtok(NULL," ");
        printf("%s\n",str);//20
        str =  my_strtok(NULL,"::");
        printf("%s\n",str);//11
        str =  my_strtok(NULL,"::");
        printf("%s\n",str);//19
        str =  my_strtok(NULL,"  ");
        printf("%s\n",str);
    #else 
        char src[]="2016/05/20 11:19:32 \0";                       
        char *str = my_strtok(src,"/");
        printf("%s\n",str);//2016
        str =  my_strtok(NULL,"/");
        printf("%s\n",str);//05
        str =  my_strtok(NULL," ");
        printf("%s\n",str);//20
        str =  my_strtok(NULL,":");
        printf("%s\n",str);//11
        str =  my_strtok(NULL,":");
        printf("%s\n",str);//19
        str =  my_strtok(NULL," ");
        printf("%s\n",str);
    #endif
        return(0);


    }


    函数运行结果是在屏幕上打印

    2016

    05

    20

    11

    19

    32


    函数的功能是在字符串str中查找delim字符串,找到后把第一个匹配的字符换成'\0',并且返回一个指向一开始查找的字符的地址,

    如 char *str="1234567";  char *delim = "5";函数在str中找到'5'后,将'5'换成‘\0’,返回'1'的地址.,在返回前,将'6'的地址保存在

    静态的 局部指针 save_p 中,下次调用strtok函数时从 save_p 指向的地址开始查找字符串。第一次调用strtok函数时需要传入一个

    地址给 str,之后调用时传NULL给str。

    展开全文
  • c++的strtok函数

    2016-11-20 10:38:56
    C++没有split函数,所以可以利用strtok函数自己写一个split。 vector split(char* str,char* tokens) { vector v; char* tmp = strtok(str,tokens); v.push_back(tmp); tmp = strtok(NULL,tokens); while...

    C++没有split函数,所以可以利用strtok函数自己写一个split。


    vector<string> split(char* str,char* tokens)
    {
    vector<string> v;
    char* tmp = strtok(str,tokens);
    v.push_back(tmp);
    tmp = strtok(NULL,tokens);
    while(tmp)
    {
    v.push_back(tmp);
    tmp = strtok(NULL,tokens);
    }
    return v;
    }

    主体是一个循环。

    展开全文
  • 通过查阅源代码自己仿照一个strtok函数功能的代码,算法比较冗长还没有优化,但大致功能可以实现,供给大家参考。 /******************************************************************** 功能:根据设置的...

    strtok函数功能是根据自己设置好的分隔符对字符串进行分割,分割结束返回NULL。

    通过查阅源代码自己仿照写了一个strtok函数功能的代码,算法比较冗长还没有优化,但大致功能可以实现,供给大家参考。

    /******************************************************************** 
    功能:根据设置的分隔符对字符串进行分割,代码还需优化,敬请期待。。。。
    时间:2020-7-9
    ********************************************************************/
    #include <stdio.h>
    
    char *strtok_pro(char *str,const char *delim,char **last);
    char *my_strtok(char *str,const char *delim);
    
    int main(int argc,const char **argv)
    {
         char str[50] = "hello/world-zhang-HE$LLO/LLLLLL-GGGGGG";
    	 printf("%s\n",my_strtok(str,"/-")); 
    	 char *p;	  	 
         while((p = my_strtok(NULL,"/-$")) != NULL)
    	 {
    		printf("%s\n",p); 
    	 }
    	 printf("string done\n");
    	 return 0;
    }
    
    /* 
       调用函数
     */
    char *my_strtok(char *str,const char *delim)
    {
        static char *last;	                      //设置一个静态指针来保存分隔符下一个元素的地址
        return strtok_pro(str,delim,&last);
    }
    
    /* 
    根据C语言中源代码中原型,本算法分开两种情况进行判断(非NULL和NULL),
     */
    char *strtok_pro(char *str,const char *delim,char **last)
    {
    	char *cp_str;
    	const char *cp_delim;
    	if(str != NULL) //判断是否到达字符串末尾
    	{		
    		for(cp_str=str;*cp_str++ != '\0';)
    		{
    			//printf("%2c",*cp_str);
    			for(cp_delim=delim;*cp_delim++ != '\0';)
    			{
    				if(*(cp_str-1) == *(cp_delim-1))      //判断是否相等
    				{
    					*(cp_str-1) = '\0';               //把分隔符替换为'\0'
    					if(*cp_str != '\0')               //判断下一位是否为结束符
    					{
    						*last = cp_str;
    					}
    					else
    					{
    						*last = NULL;
    					} 			
    					return str;
    				}
    			} 
    		}
    		*last = NULL;
    		return NULL;
    	}
    	else if(str == NULL)
    	{
    		if(*last == NULL)                            //判断是否都同时NULL
    		{
    			return NULL;                            
    		}
    		char *mid_str = *last;
    		for(cp_str = *last;*cp_str++ != '\0';)
    		{
    			for(cp_delim = delim;*cp_delim++ != '\0';)
    			{
    				if(*(cp_str-1) == *(cp_delim-1))
    				{
    					*(cp_str-1) = '\0';
    					if(cp_str != '\0')
    					{
    						*last = cp_str;
    					}
    					else 
    					{
    						*last = NULL;
    					}
    					return mid_str;
    				}
    			}			
    		}
    		*last = NULL;       //这里需要及时标记为空,否则会一直判断不出结束
           return mid_str;		//没有找到及时返回最后一节字符串的首元素地址
    	}
    	
    }

     

    展开全文
  • 一个采用substr和strrchr函数; 第二个采用pathinfo函数; 第三个采用substr和strrpos函数; 第四个采用array_pop和explode函数; 第五个采用strtok函数

    第一个采用substr和strrchr函数;

    第二个采用pathinfo函数;

    第三个采用substr和strrpos函数;

    第四个采用array_pop和explode函数;

    第五个采用strtok函数;

     

    展开全文
  • strtok种实现

    2020-08-25 20:14:10
    这里介绍一个strtok代码的实现。偶尔不想使用系统时,可以试试这个代码。它没有调用别的函数。 char *str_tok(char *s, char *delims, char **save) { int found; int ra; char *p; char *q; char *t; if
  • strtok方法

    2011-06-21 13:41:00
    为了理解strtok自己写一个函数来实现strtok的功能!没有看过源码不知道源码具体怎么实现的,自己根据方法的理解,进行了如下的实现。strtok(char *str, char *tok)第一次,str传入的的参数一定是要分割的原字符串...
  • strtok与cstrtok,看微软是怎么实现的

    千次阅读 2012-07-21 15:52:40
    最近用到了strtok这个函数,但是只支持ASCII编码,我想用来实现中文标点的分词,或者中文文字的字符串分割,于是只好自己写一个。不过我想strtok函数本身肯定不是那么简单的方法,因为最简单的方法复杂度很高,每一...
  • 探究一下strtok的用法

    2018-07-05 12:00:00
    我们来看一个我们自己写一个实现strtok函数的功能的模型: int strtok(char * buf,int len){  int i = 0;  char *p;  char *arg[10];  fgets(buf,len,stdin);  buf[strlen(buf) - 1...
  • 大家都知道strtok函数可以用来对字符串进行分割,大大满足了我们处理字符串时候的需求,不需要我们自己再去一些分割函数。 自己在使用过程中也总结了两点需要注意的地方跟大家分享一下: 首先这函数的原型为: ...
  • 不错,方便实用! c库的strtok函数也不错。 [@more@]123 456 789 012 345大家经常要用到把上面的这字符串按照空格分割.以前也是自己写分割函数.今天,无意看到微软其实自带这函数的,不过没有公布而已...
  • 自己在写一个linux下的模拟执行指令的时候,遇到了输入”cat a.c”,要将该字符串分解成cat和a.c两个单独的字符串,虽然知道有strtok的存在,但是想自己尝试写一下,于是就自己写了一个,不过总是遇到这样或那样的...
  • c++ 中字符串split函数

    千次阅读 2018-10-10 19:31:57
    这个只是用来记忆一下,时至今日才发现c++ 的cstring类中已经有...cstring中有一个strtok_s函数,它是一个分割字符串安全函数,其函数原型如下: char *strtok_s( char *_String, const char *_Delimiter, char *...
  • 在之前我自己写一个60行的链表版本的统计程序 相比这些strtok函数的程序要简洁明了的多 #include <stdio.h> #include <string.h> int main( void ) { int cnt = 0; char *blank = " "; //strtok...
  • split函数的实现

    2019-10-06 00:17:22
    JeffChensplit函数的实现2013年1月17日 jeffchen 2 条评论前几天朋友问我要几道C++面试题,我说你让他先写一个string的split函数吧,类似C语言里的strtok. 现在想想自己的代码里,split函数的实现真...
  • 自己在写一个linux下的模拟执行指令的时候,遇到了输入"cat a.c”,要将该字符串分解成cat和a.c两个单独的字符串,虽然知道有strtok的存在,但是想自己尝试写一下,于是就自己写了一个,不过总是遇到这样或那样的...
  • localtimelocaltime返回一个指向静态变量的指针,这样是线程不安全的,使用localtime_r代替STL中的容器类STL容器只保证线程读安全,不保证线程安全strtok应用函数初次调用strtok时传递一个字串的地址,比如”aaa....
  • C++的split函数

    千次阅读 2009-09-15 14:42:00
    C++ STL中没有类似Perl的split函数,必须自己写一个。下面是从网上(http://stackoverflow.com/questions/236129/c-how-to-split-a-string)转帖的代码及使用方法,还是挺管用的。另外,C的strtok()函数也可以实现...
  • 首先: 拿到这道编程题 思路: 1、拿出单词 2、单词如果重复,只输出一个 3、不区分大小写 ...可以用库函数,或者自己写转换大小写的函数(无非就是加减32嘛),根据个人喜好。 接下来,上代码: #incl...
  • c++的split方法

    2010-02-26 22:33:00
    c++的string类没有此类的函数,只好自己写一个。当然,也可以用c的系统函数strtok实现。关于strtok函数的使用见strstok详解。 #include <iostream>#include <string>#include <vector>#include &...
  • 字符串分段逆序

    2020-12-29 09:23:58
    第一次尝试 ...//自己写的类似于strtok函数,遇到空格符,就将空格赋成'\0',然后返回'\0'下一个的地址值 //如果遇到'\0'则直接返回一个NULL char* mystrtok(char* str) { while (1) { if (*str == ' ') {
  • c++中的字符串分割

    2017-09-30 16:11:22
    虽然实现这功能并不困难,但如果有标准的,谁会自己各种乱七八糟的实现呢 关于这问题,cplusplus.com有篇专门讨论它的专题 www.cplusplus.com/faq/sequences/strings/split/ 这里面提到了几种实现和...
  • 1.百度查了半天,没找到,就自己写一个测试,其实也很简单,先用QDate去获取当前的时间,时间格式设置为"yyyy-MM-dd",也就是"年-月-日"的格式,然后再利用字符串切割(strtok函数)去切割成独立的年、月、日就OK...
  • 分解命令行字符串为argc和argv

    千次阅读 2011-12-06 11:27:45
    有时候需要把一个空格分隔的长字符串分解为参数个数和参数指针,一种方法是使用strtok()函数,在内核里面没有找到这个函数,所以自己写一个分解长字符串的函数。 int parse_argv(char* str, int*argc, char** ...
  • 分割的函数可以自己写,也可以利用库函数strtok 如果利用库函数,需要一次性分割完成,因此需要预先定义一个数组,将分割好的数存起来,最后进行比较 如果自己写分割的函数,可以利用两个指针记录”."之间的字符串,...
  • Linux C下实现字符串的分割提取

    千次阅读 2015-12-29 16:51:54
    今天在linux socket编程的时候,遇见一个字符串的分割提取问题,像python这样的脚本语言能直接利用现成的split() 函数直接实现,然后自己找了下,原来linux 下的C语言也可用strtok() 函数来实现: 函数原型:  ...
  • C++ 字符串分割

    2015-09-16 15:37:00
    java和C#中字符串都可以使用split进行分割,但是C++中却没有这个方法,之前总是自己写一个函数自己进行分割,倒也不麻烦,今天在网上找了类似的函数,发现strtoc()似乎可以完成字符串的分割功能。 原型:char *...
  • C 字符串操作

    2019-11-08 20:59:14
    刚开始学C++ 手打一个JAVA split方法...了两个函数一个返回 字符串数量 第二个返回字符串数组 初学可能有bug 仅供参考 以后自己使用时发现问题也会再调 有意多使用* 而减少 使用[ ] 目的在于练习 #include <...

空空如也

空空如也

1 2 3
收藏数 44
精华内容 17
关键字:

自己写一个strtok函数