C/C++: string的trim()、split()函數實現

其他語言的lib中,對於string類都有豐富的操作函數,而C++中卻不提供一些特殊的函數功能。通過現有的一些函數也可以在c++中實現trim( )、split()等功能。

trim函數

trim( )的作用:去掉字符串首尾的空格。
可以藉助 string類中的find_first_not_of( )、find_last_not_of( )函數進行構造

	string trim(const string& str) {
		string::size_type pos = str.find_first_not_of(' ');
		if (pos == string::npos) {  //若找不到空格
			return str;
		}
		string::size_type pos2 = str.find_last_not_of(' ');
		if (pos2 != string::npos)
			return str.substr(pos, pos2 - pos + 1); //子串:第一個非空格作爲起始位置
			                                        // 字符個數:pos2-pos+1
		return str.substr(pos);
	}

split函數

split函數功能:從字符串中按照特定的分隔符進行分割,分割的結果保存到std::vector中。
例:按照分隔符“ ,”進行分割split

int split(const string& str, vector<string>& rect_, string sep = ","){
		if (str.empty())  return 0;
		
		string tmp;
		string::size_type pos_begin = str.find_first_not_of(sep); //第一個非分隔符的位置
		string::size_type comma_pos = 0;

		while (pos_begin != string::npos) {
			comma_pos = str.find(sep, pos_begin); //從下表pos_begin處開始查找字符“,”,返回其下標
			if (comma_pos != string::npos) { //comma_pos :下一個分隔符的位置
				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()) {
				rect_.push_back(tmp);
				tmp.clear;
			}
		}
		return 0;
	}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章