strtok()分割字符串函数


#include <iostream>
#include <string.h>
using namespace std;
char *my_strtok(char *dist,const char *src)
{
    static char *result;
    //此处使用静态变量保存dist,
    //为了满足库函数strtok(NULL," ")的实现。
    char map[32];
    const char *p = src;
    memset(map,0,sizeof(map));
    while (*p)
    {
        map[*p >> 3] |= (0x1 << (*p & 0x7));
        p++;
    }
    //ASCII中总共只有256个字符,所以我们将src映射到32个char数组中,
    //然后将较低的7位取出作为该数组中8个位中的一位,并且将该位置1,
    //表示这个位置存在。在这里要保证唯一确定的一一对应的关系,刚好
    //32个char数组就可以满足我们的需求了。
    char *q;
    if (dist)
        q = dist;
    else
        q = result;
    //如果从外部传进来的第一个参数是NULL,那么我们根据上一个参数
    //的结束位置开始,这里要用到保存的result变量。
    while ((map[*q >> 3] & (1 << (*q & 0x7))) && *q)q++;
    //除去前面的多余分割符号。

    dist = q;

    for (; *dist; dist++)
    {
        if (map[*dist >> 3] & (0x1 << (*dist & 0x7)))
        {
            *dist=‘\0‘;
            dist++;
            break;
        }
        //第一次出现制定分割符的地放,然后停止break。
    }
    result = dist;
    //此处result的作用就来了,保存上一次操作的最后一个位置的下一个位置,
    //也就是说,如果外面传进来NULL作为第一个参数的话,我们就会从result开始。
    return q;
}

int main()
{
    char s[] = "abc efg hlk";
    cout << my_strtok(s, " ") << endl;
    cout<<my_strtok(NULL, " ")<<endl;
    cout << my_strtok(NULL, " ") << endl;
    return 0;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2025-01-06 14:17:35

strtok()分割字符串函数的相关文章

Sql Server分割字符串函数

-- Description: 分割字符串函数 -- SELECT * FROM dbo.Split('a,b,c,d,e,f,g',',') -- ============================================= CREATE FUNCTION [dbo].[Split] ( @Text VARCHAR(8000) , @Sign NVARCHAR(4000) ) RETURNS @tempTable TABLE ( ID INT IDENTITY(1, 1) PRI

C语言分割字符串函数strtok

在编程过程中,有时需要对字符串进行分割.而有效使用这些字符串分隔函数将会给我们带来很多的便利. 下面我将在MSDN中学到的strtok函数做如下翻译. strtok :在一个字符串查找下一个符号 char *strtok( char *strToken, const char *strDelimit ); 返回值:返回指向在strToken字符串找到的下一个符号的指针,当在字符串找不到符号时,将返回NULL.每 次调用都通过用NULL字符替代在strToken字符串遇到的分隔符来修改strTok

C++ split分割字符串函数

将字符串绑定到输入流istringstream,然后使用getline的第三个参数,自定义使用什么符号进行分割就可以了. #include <iostream> #include <sstream> #include <string> #include <vector> using namespace std; void split(const string& s,vector<int>& sv,const char flag =

SQL分割字符串函数

SQL创建函数 数据库名->可编程性->函数->表值函数 右键创建“多语句表值函数” CREATE FUNCTION [dbo].[fun_splitstr](@str VARCHAR(MAX)) RETURNS @temp TABLE(id INT) AS BEGIN DECLARE @ch AS VARCHAR(100) SET @str+=',' WHILE(@str<>'') BEGIN SET @ch = LEFT(@str,CHARINDEX(',',@str,1

strtok函数的妙用,分割字符串

strtok分割字符串函数,很好的解决了字符分割的要求,不必遍历取关键字再区后面字符 这样字符串中查找关键值获取后面的东西就方便多了 #include <string.h> //加啊如头文件 char * strtok ( char * str, const char * delimiters ); 参数含义 str   ::    第一次操作时原始字符串,当strtok分割一次成功后 ,设置为  NULL 继续扫描下面的字符 知道为空 delimiters :: 标记字符 分割的中间值如 x

【Linux C中文函数手册】之 内存和字符串函数

内存和字符串函数 1) bcmp 比较内存内容 相关函数 bcmp,strcasecmp,strcmp,strcoll,strncmp,strncasecmp表头文件 #include<string.h>定义函数 int bcmp ( const void *s1,const void * s2,int n);函数说明 bcmp()用来比较s1和s2所指的内存区间前n个字节,若参数n为0,则返回0.返回值 若参数s1 和s2 所指的内存内容都完全相同则返回0 值,否则返回非零值.附加说明 建议

hive字符串函数

1. 字符串长度函数:length 语法: length(string A) 返回值: int 说明:返回字符串A的长度 举例: hive> select length('abcedfg') from lxw_dual; 7 2. 字符串反转函数:reverse 语法: reverse(string A) 返回值: string 说明:返回字符串A的反转结果 举例: hive> select reverse(abcedfg') from lxw_dual; gfdecba 3. 字符串连接函数

C/C++ 字符串分割: strtok 与 strsep 函数说明

函数原型: char *strtok(char *s, const char *delim); char *strsep(char **s, const char *delim); 功能:strtok和strsep两个函数的功能都是用来分解字符串为一组字符串.s为要分解的字符串,delim为分隔符字符串. 返回值:从s开头开始的一个个子串,当没有分割的子串时返回NULL. 相同点:两者都会改变源字符串,想要避免,可以使用strdupa(由allocate函数实现)或strdup(由malloc函

strtok():“字符串分割”实用函数

最近一直纠结于一个十分简单的问题:如何将一个字符串按标志分割开来?提出这个问题的初衷是自己在处理一个将命令行字符串转换为argc,argv格式的问题. 尝试了很多种方法,最后觉得利用strtok()函数来实现是一个比较好的方法.首先进行strtok()函数的介绍. char *strtok(string, control);  --- Tokenize string with delimiter in control. --- 通过分割符控制将字符串切片化. Purpose: strtok co