• 字符串 分割


    一、用strtok函数进行字符串分割

    原型: char *strtok(char *str, const char *delim);

    功能:通过一系列调用来 分解字符串为一组字符串。

    参数说明:str为要分解的字符串,delim为分隔符字符串。

    返回值:从str开头开始的一个个被分割的串。当没有被分割的串时则返回NULL。

    //借助strtok实现split

    #include <string.h>  //这里 如果用<string>,会  出错:‘strtok’ was not declared in this scope
    #include <stdio.h>
    
    int main()
    {
    char s[] = "Golden Global View,disk * desk"; /**若string s=“……”;错,因为函数原型char * strtok ( char * str                      , const char * delimiters );这时需要加
                          char *l=NULL; //指针 得初始化,分配空间和释放空间前需要判断指针是否为空                            //http://www.iteedu.com/plang/ccpp/article/cpointmemory.php
                          if (l==NULL)
                            delete(l);
                          l=new char(50);
                          strcpy(l,line.c_str());
    
                                    **/
    
    const char *d = " ,*";     //如果=',';错,不能从char转换成 const char*;
    char *p;
    p = strtok(s,d);//s的原型是 char*,所以若
    while(p)
    {
    printf("%s
    ",p);
    p=strtok(NULL,d);
    }
    
    return 0;
    }

    二、用STL进行字符串的分割 

    涉及到string类的两个函数find和substr:
    1、find函数
    原型:size_t find ( const string& str, size_t pos = 0 ) const;
    功能:查找子字符串第一次出现的位置。
    参数说明:str为子字符串,pos为初始查找位置。
    返回值:找到的话返回第一次出现的位置,否则返回string::npos 

    2、substr函数
    原型:string substr ( size_t pos = 0, size_t n = npos ) const;
    功能:获得子字符串。
    参数说明:pos为起始位置(默认为0),n为结束位置(默认为npos)
    返回值:子字符串 

    实现如下:

    //字符串分割函数

    std::vector<std::string> split(std::string str,std::string pattern)
    {
    std::string::size_type pos;
    std::vector<std::string> result;
    str+=pattern;//扩展字符串以方便操作
    int size=str.size();
    
    for(int i=0; i<size; i++)
    {
    pos=str.find(pattern,i);
    if(pos<size)
    {
    std::string s=str.substr(i,pos-i);
    result.push_back(s);
    i=pos+pattern.size()-1;
    }
    }
    return result;
    }
     

      

    三、用Boost库的正则表达式 进行字符串的分割


    实现如下:

    std::vector<std::string> split(std::string str,std::string s)
    {
    boost::regex reg(s.c_str());
    std::vector<std::string> vec;
    boost::sregex_token_iterator it(str.begin(),str.end(),reg,-1);
    boost::sregex_token_iterator end;
    while(it!=end)
    {
    vec.push_back(*it++);
    }
    return vec;
    }
  • 相关阅读:
    docker简单入门之使用docker容器部署简单的java web开源项目jpress博客程序
    go语言的安装、环境变量配置及简单使用
    bootstrap4简单使用和入门02-bootstrap的js组件简单使用
    bootstrap4简单使用和入门01-简单表单的使用
    bootstrap4简单使用和入门03-响应式布局
    python操作三大主流数据库(14)python操作redis之新闻项目实战②新闻数据的展示及修改、删除操作
    python操作三大主流数据库(13)python操作redis之新闻项目实战①新闻数据的导入
    python操作三大主流数据库(12)python操作redis的api框架redis-py简单使用
    python操作三大主流数据库(11)redis的安装和简单使用
    python操作三大主流数据库(10)python操作mongodb数据库④mongodb新闻项目实战
  • 原文地址:https://www.cnblogs.com/xaf-dfg/p/3698975.html
Copyright © 2020-2023  润新知