Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

นับและแสดงอักษรที่ค่า ASCII ไม่อยู่ในช่วง [l, r] ใน C++

เราได้รับสตริงและช่วงค่า ASCII [l, r] งานคือการนับและแสดงอักษรในสตริงที่มีค่า ASCII ไม่อยู่ในช่วงที่กำหนด

ตารางค่า ASCII

A-Z: 65-90 | a-z: 97-122

ตัวอย่าง

Input − String str = "point"  First = 111, Last = 117 Output − characters not in range: i, n  Count: 2

คำอธิบาย − i (105) และ n (110) ไม่อยู่ในช่วง [111, 117]

Input − String str = "ABCZXY"  First = 65, Last = 70 Output − characters not in range: Z, X, Y  Count: 3

คำอธิบาย − Z(90), X(88), Y(89) ไม่อยู่ในช่วง [65, 70]

แนวทางการแก้ปัญหา

  • รับสตริงและค่า left, right
  • ใช้ unordered_map ป้องกันการนับซ้ำตัวอักษรเดียวกัน
  • วนลูปตรวจสอบแต่ละตัวอักษร
  • ถ้าค่า ASCII ไม่อยู่ในช่วง [left, right] ให้เพิ่มตัวนับและแสดงผล

ตัวอย่างโค้ด C++

#include <iostream>
#include <unordered_map>
using namespace std;

int countNonChar(string str, int left, int right) {
    int count = 0;
    unordered_map 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: " << countNonChar(str, left, right);
    return 0;
}

ผลลัพธ์

Characters not in range: t u r a s p 
Count: 8

บทความนี้สาธิตวิธีนับและแสดงตัวอักษรในสตริงที่มีค่า ASCII ไม่อยู่ในช่วงที่กำหนด ใช้ unordered_map เพื่อป้องกันการแสดงตัวอักษรซ้ำ