เราได้รับสตริงและช่วงค่า 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 เพื่อป้องกันการแสดงตัวอักษรซ้ำ