C++實現字符串分割
阿新 • • 發佈:2018-10-21
size 空字符 連續 string 空格 == st3 bstr test
#include <iostream> #include <string> #include <cstring> #include <vector> using namespace std; string reverse_one_word(string str) { for(int i = 0; i < str.length()/2; i ++) { char tmp; tmp = str[i]; str[i] = str[ str.length() - i - 1 ]; str[ str.length() - i - 1 ] = tmp; } return str; } vector<string> split(const string& str,const string& delim) { //將分割後的子字符串存儲在vector中 vector<string> res; if("" == str) return res; string strs = str + delim; //*****擴展字符串以方便檢索最後一個分隔出的字符串 size_t pos; size_t size = strs.size(); for (int i = 0; i < size; ++i) { pos = strs.find(delim, i); //pos為分隔符第一次出現的位置,從i到pos之前的字符串是分隔出來的字符串 if( pos < size) { //如果查找到,如果沒有查找到分隔符,pos為string::npos string s = strs.substr(i, pos - i);//*****從i開始長度為pos-i的子字符串 res.push_back(s);//兩個連續空格之間切割出的字符串為空字符串,這裏沒有判斷s是否為空,所以最後的結果中有空字符的輸出, i = pos + delim.size() - 1; } } return res; } // //void test1() { //空字符串 // cout << "******test1****** "<<endl; // string s = ""; // // std::vector<string> res = split(s, " "); // for (int i = 0; i < res.size(); ++i) // { // cout << res[i] <<endl; // } //} // //void test2() { //只有一個字符串 // cout << "******test2****** " <<endl; // string s = "my"; // // std::vector<string> res = split(s, " "); // for (int i = 0; i < res.size(); ++i) // { // cout << res[i] <<endl; // } //} void test3() { //正常字符串 cout << "******test3****** "<<endl; string s = "my|name|is|caihuihuang"; std::vector<string> res = split(s, "|"); for (int i = 0; i < res.size(); ++i) { cout << res[i] <<endl; } } int main() { // test1(); // test2(); test3(); return 0; }
C++實現字符串分割