字符串操作
字符串处理
-
字符串去分割符
void RemoveDelimiter(string& str) { array<char, 2> delimiterArray{',', ' '}; for (int i = 0; i < str.size(); ++i){ if (auto it = find(delimiterArray.begin(), delimiterArray.end(), str[i]); it != delimiterArray.end()){ str.erase(i, 1); i--; } } } -
字符串分割
// str = "123+456=689" vector<string> SplitString(string& str) { array<char, 4> delimiterNums{'+', '-', '*', '/'}; vector<string> splitedString; for (int i = 0; i < str.size(); ++i){ if (auto it = find(delimiterNums.begin(), delimiterNums.end(), s[i]); it != str.end()){ char delimiter = s[i]; splitedString.push_back(str.substr(0, i)); splitedString.push_back(string{delimiter}); str.erase(0, i+1); i = -1; } } splitedString.push_back(str); } -
字符串去两边空格
void Stripe(string& s) { for (int i = 0; i < s.size(); ++i){ if (s[i] != ' '){ s = s.substr(i); break; } } for (int i = s.size(); i >= 0; --i){ if (s[i] != ' '){ s = s.substr(0,i+1); break; } } } -
字符串加法
字符串加法较为简单,直接将每一位进行相加然后即可,具体可分为四步。为了方便计算始终保证
a字符串的长度更长。- 判断长度,交换并反向
- 遍历取一位进行计算
- 处理剩余字符串,注意前面计算可能进位不为
0 - 反向结果字符串
// 大数加法 cyclomatic complexity : 5 std::string StringAdd(std::string& a, std::string& b) { std::string res; // 交换并反向,然后取每一位进行加和 if (a.size() < b.size()){ swap(a, b); } reverse(a.begin(), a.end()); reverse(b.begin(), b.end()); // 取每一位进行加和 int carry = 0; for (int i = 0; i < b.size(); ++i){ int sum = (a[i] - '0') + (b[i] - '0') + carry; res.push_back(sum%10 + '0'); carry = sum/10; } // 处理更长的剩余字符串 int i = b.size(); while (i != a.size()){ if (carry > 0){ int sum = a[i] + carry; res.push_back(sum%10); carry = sum/10; }else{ res.push_back(a[i]); } i++; } reverse(res.begin(), res.end()); return res; }

浙公网安备 33010602011771号