Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Đếm và in ký tự ASCII không trong khoảng [l, r] trong C++

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