2022.09.07 广发银行
1. 判断整数的二进制字符串是否是回文串
如 5 的二进制为 101 是回文串,6 的二进制为 110 不是回文串
bool isPalindromeBit(int n) { string str=""; while(n!=0){ str = to_string(n%2) + str; n=n/2; } cout<<str<<endl; for(int i = 0;i<str.length()/2;i++){ if(str[i]!=str[str.length()-1-i]){ return false; } } return true; }
2. 识别邮箱字符串并输出 字符串
邮箱字符串的定义:
- 带@
- @前缀:至少2字符;首字符为大小写英文,数字,下划线;非首字符为大小写英文,数字,下划线_,点. ,减号-。
- @后缀:大小写字母,数字,点.;至少一个点. ;点后字符是2个以上的大小写字母。
如果不存在这样的邮箱字符串,输出false
用正则匹配应该很简单,但是为什么不支持regex呢?

class Solution { public: bool isFirst(char c) { if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || (c >= '0' && c <= '9') || c == '_') { return true; } return false; } bool isFront(char c) { if (isFirst(c)) { return true; } if (c == '.' || c == '-') { return true; } return false; } bool isBack(char c) { if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || (c >= '0' && c <= '9') || c == '.') { return true; } return false; } bool isEnd(char c) { if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')) { return true; } return false; } string printEmail(string str) { bool flag = false; string temp = ""; int index = str.find('@'); int front = index; int end = index; while (index >= 0) { //@前面有两位 if (index >= 2 && isFront(str[index - 1]) && isFront(str[index - 2])) { //找到前缀的起始位置front front = index - 2; while (front-1 >= 0 && isFront(str[front-1])) { front--; } while (!isFirst(str[front]) && front <= index - 2) { front++; } //@后面有小数点 bool backAva = true; string back = str.substr(index + 1, str.size() - index); // 找到最远的小数点 int point = back.find_last_of('.'); if (point >= 0) { int i = 0; // 判断@和.之内的字符是否合法 while (i < point && backAva) { if (!isBack(back[i])) { // 不合法,找更近一点的小数点 back = back.substr(0, i); point = back.find_last_of('.'); // 如果没有其他小数点,则说明后缀无效 if(point < 0){ backAva = false; break; } i = 0; continue; } i++; } // @和.之间的字符有效,再找到.之后的结束位置end if (backAva && point + 2 < back.size() && isEnd(back[point + 1]) && isEnd(back[point + 2])) { point = point + 2; while (point + 1 < back.size() && isEnd(back[point + 1])) { point++; } end = index + point + 1; } } } if (front <= index - 2 && end >= index + 3) { if (!flag) { flag = true; } temp += " " + str.substr(front, end - front + 1); } str = str.substr(end + 1, str.size() - end + 1); index = str.find('@'); } if (flag) { return "true" + temp; } return "false"; } };