Cho một chuỗi và khoảng giá trị ASCII [l, r], nhiệm vụ là đếm và in ra các ký tự trong chuỗi có mã ASCII không nằm trong khoảng này.
Bảng mã ASCII tham khảo
A-Z: 65-90 | a-z: 97-122
Ví dụ
Input - str = "point", First = 111, Last = 117 Output - characters not in range: i, n, Count: 2
Giải thích - 'i'(105) và 'n'(110) không nằm trong [111, 117].
Input - str = "ABCZXY", First = 65, Last = 70 Output - characters not in range: Z, X, Y, Count: 3
Phương pháp tiếp cận
- Duyệt qua từng ký tự trong chuỗi
- Kiểm tra mã ASCII (int)str[i] có nằm ngoài [left, right] không
- Dùng unordered_map để in mỗi ký tự khác nhau chỉ một lần
- Đếm tổng số ký tự thỏa mãn (có thể trùng lặp)
Ví dụ code C++
#include <iostream>
#include <unordered_map>
#include <string>
using namespace std;
int count_non_char(string str, int left, int right) {
int count = 0;
unordered_map<char, int> m;
int len = str.length();
for (int i = 0; i < len; i++) {
if (!(left <= str[i] && str[i] <= right)) {
count++;
if (m[str[i]] != 1) {
cout << str[i] << " ";
m[str[i]]++;
}
}
}
return count;
}
int main() {
string str = "tutorialspoint";
int left = 102, right = 111;
cout << "Characters not in range: ";
cout << "\nCount: " << count_non_char(str, left, right);
return 0;
}
Kết quả
Characters not in range: t u r a s p Count: 8