C++分割字符串和trim

来源:互联网 发布:u8用友软件 编辑:程序博客网 时间:2024/06/08 06:57

一. 使用strtok函数分割

原型:char *strtok(char *s, char *delim);
strtok在s中查找包含在delim中的字符并用NULL(‘\0’)来替换,直到找遍整个字符串。
功能:分解字符串为一组字符串。s为要分解的字符串,delim为分隔符字符串。
说明:首次调用时,s指向要分解的字符串,之后再次调用要把s设成NULL。
strtok在s中查找包含在delim中的字符并用NULL(‘\0’)来替换,直到找遍整个字符串。
返回值:从s开头开始的一个个被分割的串。当没有被分割的串时则返回NULL。
所有delim中包含的字符都会被滤掉,并将被滤掉的地方设为一处分割的节点。

char str[] = "now # is # good # country";char delims[] = "#";char *result = NULL;result = strtok(str, delims);while( result != NULL ) {   cout<<result<<"\t";   result = strtok( NULL, delims );}

二. 使用strstr函数分割

原型:extern char *strstr(char *str, char *needle);
功能:从字符串str中寻找needle第一次出现的位置(不比较结束符NULL)。
说明:返回指向第一次出现needle位置的指针,如果没找到则返回NULL。

#include <stdio.h>#include <string.h>int ParseWordsByLine(char* str_line){    if(strlen(str_line) == 0)    {        return -1;    }    const char* needle=" ";    char* buf = strstr(str_line, needle);    while(buf != NULL)    {        buf[0]='\0';        if(strlen(str_line) > 0)        {            printf("%s\n", str_line);        }          str_line = buf + strlen(needle);        buf = strstr(str_line, needle);    }    return 0;}int main() {  char str[1024] = "  abd      re 43 s dc5 Ad ";  ParseWordsByLine(str);  return 0;}

三.string类型分割

vector<string> split(string str,string pattern){    string::size_type pos;    vector<string> result;    str += pattern;    int size=str.size();    for(int i=0; i<size; i++)    {        pos=str.find(pattern,i);        if((int)pos<size)        {            string s=str.substr(i,pos-i);            result.push_back(s);            i=pos+pattern.size()-1;        }    }    return result;}

总结:strtok比较适合多个字符作分隔符(如按#;|分割)的场合,而strstr适合用字符串作分隔符的场合。

四.string去除首尾空白,trim

string trim(string &s){    if (s.empty())return s;    s.erase(0,s.find_first_not_of(" "));    s.erase(s.find_last_not_of(" ") + 1);    return s;}
0 0
原创粉丝点击