博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
字符串分割和替换函数(常用)
阅读量:4981 次
发布时间:2019-06-12

本文共 3784 字,大约阅读时间需要 12 分钟。

对于字符串,主要的操作时字符串替换和字符串分割,下面给出这几个函数

//简洁,不保留空串std::vector
split_s(const char* src, const char* delim);//保留空串,防止参数错误std::vector
split_x(const char* src, const char* delim);std::vector
split_c(const char* src, char delim);//整体替换std::string replace_all_distint(const std::string& src, const std::string& old_str, const std::string& new_str);std::string replace_all_distint(const char* src, const char* old_s, const char* new_s);//所有的分别替换std::string replace_all_distint_char(const std::string& src, const std::string& old_str, char new_w);std::string replace_all_distint_char(const char* src, const char* old_s, char new_w);std::string replace_all_distint_char(const std::string& src, const std::string& old_str, char new_w);

上面是这些函数的声明,注意需要包含一些STL头文件 vector, string, sstream

下面的是具体实现

/*字符串分割函数参数:---src: 被分割的字符串---delim: 分隔符所组成的字符串功能:将被分割的字符串中所有的delim换成\0,进行分割,连在一起的当成一个例如:split_s("AAABBCCGGGBDDD", "GB") = {"AAA", "CC", "DDD"}*/std::vector
split_s(const char* src, const char* delim){ std::vector
vec; if (NULL == src || NULL == delim) { return vec; } char* p; char* source = new char[strlen(src) + 1]; strcpy(source, src); p = strtok(source, delim); while (p) { std::string str(p); p = strtok(NULL, delim); vec.push_back(str); } delete source; return vec;}/*字符串分割按照给的分隔符,彻底分解字符串,分隔符如果紧挨在一起则中间中空串表示例如:split_x("AAABBCCGGGBDDD", "GB") = {"AAA", "", "CC", "", "", "", "DDD"}*/std::vector
split_x(const char* src, const char* delim){ if (NULL == src || NULL == delim) { std::vector
vec; return vec; } std::string all = replace_all_distint_char(src, delim, delim[0]); return split_c(all.c_str(), delim[0]);}/*按照某个字符分割字符串split_c("AAABBCCGGGBDDD", 'B') = {"AAA", "", "CC", "GGG", "DDD"}*/std::vector
split_c(const char* src, char delim){ std::vector
vec; if (NULL == src) { return vec; } stringstream is(src); string line; while(getline(is,line,delim)) { vec.push_back(line); } return vec;}/*将字符串替换,直到不在出现old_s,这个不常用如 replace_all("112211", "12", "21") => 121211 => 212111 => 221111*/std::string replace_all(char* src, const char* old_s, const char* new_s){ std::string source(src); std::string old_str(old_s); std::string new_str(new_s); while(true) { std::string::size_type pos(0); if ((pos = source.find(old_str)) != string::npos) { source.replace(pos,old_str.length(), new_str); } else { break; } } return source;}/*将所有old_str换成new_str*/std::string replace_all_distint(const std::string& src, const std::string& old_str, const std::string& new_str){ std::string source(src); for (std::string::size_type pos(0); pos != std::string::npos; pos+=new_str.length()) { if ((pos = source.find(old_str, pos)) != string::npos) { source.replace(pos, old_str.length(), new_str); } else { break; } } return source;}/*重载上面的函数*/std::string replace_all_distint(const char* src, const char* old_s, const char* new_s){ std::string source(src); std::string old_str(old_s); std::string new_str(new_s); return replace_all_distint(source, old_str, new_str);}/*将所有old_str中出现过的字符都替换为new_w*/std::string replace_all_distint_char(const std::string& src, const std::string& old_str, char new_w){ std::string source(src); for (int i = 0; i < source.length(); i++) { if (old_str.find(source[i], 0) != std::string::npos) { source[i] = new_w; } } return source;}/*重载上面的函数*/std::string replace_all_distint_char(const char* src, const char* old_s, char new_w){ std::string source(src); std::string old_str(old_s); return replace_all_distint_char(source, old_str, new_w);}

转载于:https://www.cnblogs.com/xiao-cheng/archive/2012/12/02/2798617.html

你可能感兴趣的文章
luogu P1073 最优贸易
查看>>
javaScript数字、布尔类型的使用方法
查看>>
排球记分员
查看>>
SharePoint 2013 搭建负载均衡(NLB)
查看>>
SharePoint 调用 WebService操作List小记
查看>>
Linux 文件与目录管理
查看>>
【动态规划】多米诺骨
查看>>
软工实践第一次作业
查看>>
sourse insight总是代码一写长了,就自动换行
查看>>
20145105 《Java程序设计》第7周学习总结
查看>>
ELK 安装及使用
查看>>
CSS光标聚焦改指针为手
查看>>
WEB_flag在index里
查看>>
【转载】mongoDB基本使用手册
查看>>
我的vim配置
查看>>
vue中element 的上传功能
查看>>
java操作大文件复制
查看>>
PHP 函数
查看>>
源码包安装编译过程
查看>>
CString与LPCWSTR、LPSTR、char*、LPWSTR等类型的转换
查看>>