string字符串分词

这个问题来自于input为用','分隔开的字符串,如"1,-8,1,3"。因为有'-',所以不能单个字符处理(除非多写一个if)。以下将该string的逗号去掉,并保存在vector中。

使用strtok分

vector<string> split(string orignal, string del){
  vector<string> ans;
  char *tmp = new char[orignal.size+1];
  strcpy(tmp,orignal.c_str());
  char* t = strtok(tmp,del.c_str());
  while(t!=NULL){
    ans.push_back(string(t));
    t=strtok(NULL,del.c_str());
  }
delete []tmp;
return ans;
}

这几行代码中需要注意的问题:

  1. string转换为char型数组。比如string = "abc",使用cc=ss.toCharArray()则cc = 'a','b','c'。后面是没有结束标志'\0'的。故使用strcpy进行操作。
  2. strtok是c字符串的处理函数,传入的都是char *的字符串(首地址)。第一个参数为待分词的字符串,第二个参数为delimiter,两个都是字符串,必须以'\0'结束。返回值是找到的字符串的首地址。
  3. strtok会将原始的字符串保存在函数中,若持续调用,后续第一个参数传入NULL。
  4. string类向字符串转化:orignal.c_str();
  5. 申请的tmp要delete掉,防止内存泄漏;

使用正则表达式分

教程:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions
分词符号表(Regular expression syntax chearsheet):
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions/Cheatsheet

posted @ 2021-10-13 10:59  Maxwell'Maxwill  阅读(140)  评论(0编辑  收藏  举报