C++ string trim / erase / to_lowercase 及正则表达式 match / search / replace

#include <iostream>
#include <strstream>
#include <string>
#include <iomanip>
#include <vector>
#include <map>
#include <set>
#include <stack>
#include <array>
#include <unordered_map>
#include <unordered_set>
#include <algorithm>
#include <functional>
#include <queue>
#include <array>
#include <cmath>
#include <regex>
using namespace std;

#include "ListNode.h"
#include "TreeNode.h"

int main() {
	auto ltrim = [](string& s) {
		s.erase(s.begin(), find_if(s.begin(), s.end(), [](unsigned char c) { return !std::isspace(c); }));
	};
	auto rtrim = [](string& s) {
		s.erase(find_if(s.rbegin(), s.rend(), [](unsigned char c) { return !std::isspace(c); }).base(), s.end());
	};
	auto trim = [ltrim, rtrim](string& s) {
		ltrim(s);
		rtrim(s);
	};

	cout << "---- demo for string trim:" << endl;
	string str = "   Hello World!   ";
	ltrim(str);
	cout << "ltrim : " << "/"  << str << "/" << endl;

	str = "   Hello World!   ";
	rtrim(str);
	cout << "rtrim : " << "/"  << str << "/" << endl;


	str = "   Hello World!   ";
	trim(str);
	cout << "trim : " << "/"  << str << "/" << endl;

	str = "   Hello World!   ";
	auto erase_all = [](string& str) {
		str.erase(remove(str.begin(), str.end(), ' '), str.end());
		return str;
	};
	cout << "erase_all : " << erase_all(str) << endl;

	cout << endl;
	cout << "---- demo for regex_match :" << endl;
	cout << "is number? " << std::boolalpha  << regex_match("123A", regex("^\\d+$")) << endl;

	cout << endl;
	cout << "---- demo for regex_search :" << endl;

	cout << "-- search one" << endl;

	string s = "AA01 + AB00 * 00BB";
	smatch sm;
	auto r = regex("([A-Z]{2})(\\d{2})");
	cout << std::boolalpha << regex_search(s, sm, r) << endl;
	for (auto i = 0; i < sm.size(); i ++) {
		cout << "[" << i << "]" << " = " << sm[i] << endl;
	}

	cout << "-- search all" << endl;

	auto to_lowercase = [](string s) {
		std::transform(s.begin(), s.end(), s.begin(), [](char c) { return std::tolower(static_cast<unsigned char>(c)); });
		return s;
	};
	while (regex_search(s, sm, r))
	{
		std::cout << sm.str() << " --> " << sm[2] << to_lowercase(sm[1]) << '\n';
		s = sm.suffix();
	}

	cout << endl;
	cout << "---- demo for regex_replace :" << endl;
	s = "AB02 AB03";
	r = regex("([A-Z]{2})(\\d{2})");
	cout << regex_replace(s, r, "$& ==> $2$1 , ") << endl;

	return 0;
}

  output:

---- demo for string trim:
ltrim : /Hello World!   /
rtrim : /   Hello World!/
trim : /Hello World!/
erase_all : HelloWorld!

---- demo for regex_match :
is number? false

---- demo for regex_search :
-- search one
true
[0] = AA01
[1] = AA
[2] = 01
-- search all
AA01 --> 01aa
AB00 --> 00ab

  

posted @ 2021-07-08 17:44  麦仲肥  阅读(127)  评论(0编辑  收藏  举报