1. 程式人生 > >C++實現字符串分割

C++實現字符串分割

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++實現字符串分割