c++ 字符串工具类
#include <string> #include "util.h" namespace strtool{ std::string trim(const std::string& str) { std::string::size_type pos = str.find_first_not_of(' '); if (pos == std::string::npos) { return str; } std::string::size_type pos2 = str.find_last_not_of(' '); if (pos2 != std::string::npos) { return str.substr(pos, pos2 - pos + 1); } return str.substr(pos); } void split(const std::string& str, std::string sep, std::vector<std::string>& ret) { if (str.empty()) { return; } std::string tmp; std::string::size_type pos_begin = str.find_first_not_of(sep); std::string::size_type comma_pos = 0; while (pos_begin != std::string::npos) { comma_pos = str.find(sep, pos_begin); if (comma_pos != std::string::npos) { tmp = str.substr(pos_begin, comma_pos - pos_begin); pos_begin = comma_pos + sep.length(); } else{ tmp = str.substr(pos_begin); pos_begin = comma_pos; } if (!tmp.empty()){ ret.push_back(tmp); tmp.clear(); } } return; } std::string replace(const std::string& str, const std::string& src, const std::string& dest) { std::string ret; std::string::size_type pos_begin = 0; std::string::size_type pos = str.find(src); while (pos != std::string::npos) { ret.append(str.data() + pos_begin, pos - pos_begin); ret += dest; pos_begin = pos + 1; pos = str.find(src, pos_begin); } if (pos_begin < str.length()) { ret.append(str.begin() + pos_begin, str.end()); } return ret; } } // namespace strtool
#include <vector> //std::vector namespace strtool{ std::string trim(const std::string& str); void split(const std::string& str, std::string sep, std::vector<std::string>& ret); std::string replace(const std::string& str, const std::string& src, const std::string& dest); } // namespace strtool
#include <iostream> #include <vector> #include <string> void split(const std::string& str, std::string sep, std::vector<std::string>& ret) { if (str.empty()) { return; } std::string tmp; std::string::size_type pos_begin = str.find_first_not_of(sep); std::string::size_type comma_pos = 0; while (pos_begin != std::string::npos) { comma_pos = str.find(sep, pos_begin); if (comma_pos != std::string::npos) { tmp = str.substr(pos_begin, comma_pos - pos_begin); pos_begin = comma_pos + sep.length(); } else{ tmp = str.substr(pos_begin); pos_begin = comma_pos; } if (!tmp.empty()){ ret.push_back(tmp); tmp.clear(); } } return; } int main(void) { std::string line = "a\tb\tc\td"; std::string sep = "\t"; std::vector<std::string> tokens; split(line, sep, tokens); int len = tokens.size(); for (int i = 0; i < len; i++){ std::cout << tokens[i] << std::endl; } }