第一种,分隔符为空格。
使用istringstream来放置split之后的结果
#include <iostream> #include <sstream> #include <string> using namespace std; int main() { string s("Somewhere down the road"); istringstream iss(s); do { string sub; iss >> sub; cout << "Substring: " << sub << endl; } while (iss); }
使用vector<string>来放置split之后的结果
/** * 切割字符串 * @param original [in] 需要切分的字符串 * @param separator [in] 分隔符 * @param col_limit [in] 最多解析的栏目数,0解析全部域 * @param result [out] 输出列表 */ void split_string(const string& original, char separator, uint32_t col_limit, vector<string>* result) { result->clear(); size_t current_pos = 0, previous_pos = 0; uint32_t col_count = 0; while((current_pos = original.find(separator, previous_pos)) != string::npos && (col_limit == 0 || col_count < col_limit)) { string part(original.substr(previous_pos, current_pos - previous_pos)); result->push_back(part); previous_pos = current_pos + 1; col_count ++; } if(col_limit == 0 || col_count < col_limit) { string part(original.substr(previous_pos)); result->push_back(part); } }
使用动态分配的内存来放置分隔后的结果,输出结果为一个数组的地址,数组的元素的类型为char*,即数组的每个元素是一个char*指针,指向的分割后的一小段的地址。
int split_string(char chr,char * src,uint32_t dstlimit,char ** dstlist,uint32_t * dstnum) { char * ptab; ptab = src; *dstnum = 0; if(*ptab != 0) dstlist[(*dstnum)++] = ptab; ptab = strchr(ptab,chr); while(ptab != NULL && *dstnum < dstlimit){ *ptab++ = '\0'; dstlist[(*dstnum)++] = ptab; ptab=strchr(ptab,chr); } return 0; }
char * field_list[33]; uint32_t feature_item_num; uint32_t tmp_value; struct in_addr tmp_addr; split_string('\t',line,33,field_list,&feature_item_num); if(feature_item_num != 33){ ADR_WARNING("parse src line error! %s\n",field_list[0]); ADR_WARNING("unexpected number of splitting result! \n"); return -1; } sscanf(field_list[18],"%d",&tmp_value);