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
浙公网安备 33010602011771号