如何在c++中实现字符串分割函数分裂详解

  


  

  

在学习c++中字符串相关基本用法的时候,发现了sstream的istringstream[1]可以将字符串类似于控制台的方式进行输入,而实质上这个行为等同于利用空格将一个字符串进行了分割,于是考虑到可以利用这个特性来实现c++库函数中没有的字符串分割函数分

        字符串src(阿凡达123《泰坦尼克号》5.2 K);   istringstream istrStream (src);//建立src到istrStream的联系   字符串s1, s2;   int n;双d;字符c;   istrStream祝辞祝辞s1祝辞祝辞n在祝辞d在祝辞s2祝辞祝辞c;//以空格为分界的各数值则输入到了对应变量上      


  

  

目的是可以像js中一样,调用一个函数即可以方便地获取到处理完毕后的字符串数组,根据c++的实际情况再进行参数调整。

  

<强> 1。输入输出:

        字符串*分裂(int&长度、字符串str const char牌=')      

返回:处理完的字符串数组的首地址
  

  

传入:字符串str,分隔符令牌(默认参数为空格),以及引用参数长度,指明处理完毕后动态分配的数组长度

  

<强> 2。数据透明处理:
  

  

由于istringstream会像cin一样,把空格视为数据间的界限,所以当分隔符不是空格时,需要将传入的分隔符换为空格,并且要提前对原有空格进行数据透明处理
  

  

字符替换利用了库算法中的替代()[2]

        const char空间=0;   如果令牌!=' '){//先把原有的空格替换为ASCII码中的不可见字符   取代(str.begin (), str.end(), ' ',空间);//再把分隔符换位空格,交给字符串流处理   替换(str.begin (), str.end(),令牌,' ');   }      
  

,假设输入字符串为:“a b, c, d, e, f g”
  ,分隔符为非空格:','
  ,则被替换为:“aSPACEb c d e fSPACEg”
  

     

<强> 3。数据分割:

     //实例化一个字符串输入流,输入参数即待处理字符串   istringstream i_stream (str);//将长度置零   长度=0;   queue问;//用一个字符串实例年代接收输入流传入的数据,入队并计数   字符串年代;   ,而(i_stream>的在s) {   q.push(年代);   长度+ +;   }      

<强> 4。数组生成:

     //根据计数结果动态开辟一个字符串数组空间   字符串*结果=新的字符串(长度);//将队列中的数据转入数组中   for (int i=0;我& lt;长度;我+ +){   结果[我]=q.front ();//将替换掉的空格进行还原   如果令牌!=' ')取代(结果[我].begin(),(我)指标(),最终结果空间,' ');   q.pop ();   }      


  

        # include & lt; iostream>   # include & lt; string>   # include & lt; queue>   # include & lt; sstream>   # include & lt; algorithm>   使用名称空间性病;      字符串*分裂(int&长度、字符串str const char牌='){   const char空间=0;   如果令牌!=' '){   取代(str.begin (), str.end(), ' ',空间);   替换(str.begin (), str.end(),令牌,' ');   }   istringstream i_stream (str);   queue问;   长度=0;   字符串年代;   ,而(i_stream>的在s) {   q.push(年代);   长度+ +;   }   字符串*结果=新的字符串(长度);   for (int i=0;我& lt;长度;我+ +){   结果[我]=q.front ();   q.pop ();   如果令牌!=' ')取代(结果[我].begin(),(我)指标(),最终结果空间,' ');   }   返回结果;   }//测试:   int main () {   int长度;   字符串*结果=分裂(长度,“a b, c, d, e, f g”, ', ');   for (int i=0;我& lt;长度;我+ +)cout<& lt;结果[我]& lt; & lt; endl;   返回0;   }      


  

  

[1] c++字符串类(C + +字符串)完全攻略
  

  

[2] c++字符串替换指定字符

  

  

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对的支持。

如何在c++中实现字符串分割函数分裂详解