zoukankan      html  css  js  c++  java
  • 字符串 分割

    一、用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;
    }
  • 相关阅读:
    论文才考文献批量修改上角标
    Java开发工具打包下载
    navcat导入mdf文件教程
    net::ERR_INCOMPLETE_CHUNKED_ENCODING
    springboot利用AbstractRoutingDataSource实现动态切换数据源
    springboot利用ConfigurationProperties注解配置数据源无法读取配置信息
    with opne()
    专职DBA-基于Dcoker环境初始化三台虚拟机
    因为下游MySQL的sql_mode设置与上游TiDB的sql_mode不一样,导致drainer同步状态下线。
    Mysql语句
  • 原文地址:https://www.cnblogs.com/xaf-dfg/p/3698975.html
Copyright © 2011-2022 走看看