เราได้รับสตริงที่มีความยาวเท่าใดก็ได้ และภารกิจคือการคำนวณการนับและพิมพ์ตัวอักษรในสตริงที่มีค่า ASCII ไม่อยู่ในช่วง [l,r]
ค่า ASCII สำหรับอักขระ A-Z แสดงไว้ด้านล่าง
A | B | C | D | E | F | G | สูง | ฉัน | J | K | L | ม | ไม่มี | O | P | Q | R | S |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 |
T | U | V | W | X | Y | Z |
---|---|---|---|---|---|---|
84 | 85 | 86 | 87 | 88 | 89 | 90 |
ค่า ASCII สำหรับอักขระ a-z แสดงไว้ด้านล่าง
ก | b | c | d | จ | f | g | ช | i | j | k | ล | ม | n | o | p | q | r | s |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
9 7 | 9 8 | 9 9 | 10 0 | 10 1 | 10 2 | 10 3 | 10 4 | 10 5 | 10 6 | 10 7 | 10 8 | 10 9 | 11 0 | 11 1 | 11 2 | 11 3 | 11 4 | 11 5 |
t | u | v | w | x | y | z |
---|---|---|---|---|---|---|
116 | 117 | 118 | 119 | 120 | 121 | 122 |
ตัวอย่าง
Input − String str = “point First = 111, Last = 117 Output − characters not in the given range are: i, n Count is: 2
คำอธิบาย − เนื่องจาก i และ n ไม่อยู่ในช่วง [111, 117] อักขระเหล่านี้จะถูกนับ
Input − String str = “ABCZXY First = 65, Last = 70 Output − characters in the given range are: A, B, C Count is: 3
คำอธิบาย − เนื่องจาก Z, X และ Y ไม่อยู่ในช่วง [65, 70] อักขระเหล่านี้จะถูกนับ
แนวทางที่ใช้ในโปรแกรมด้านล่างมีดังนี้
-
ป้อนสตริง ค่าเริ่มต้นและสิ้นสุดเพื่อสร้างช่วงและเก็บไว้ในตัวแปร str.
-
คำนวณความยาวของสตริงโดยใช้ฟังก์ชัน length() ที่จะคืนค่าจำนวนเต็มตามจำนวนตัวอักษรในสตริงรวมทั้งช่องว่าง
-
ใช้ตัวแปรชั่วคราวที่จะเก็บจำนวนอักขระและสร้างแผนที่ สมมติว่า mp
-
เริ่มการวนซ้ำจาก i ถึง 0 จนกว่า i จะน้อยกว่าความยาวของสตริง
-
ภายในลูป ตรวจสอบว่าเริ่มต้นน้อยกว่าไม่เท่ากับ str[i] และ str[i] น้อยกว่าไม่เท่ากับสิ้นสุด
-
ภายใน if ตรวจสอบว่า mp[str[i]] ! =1 จากนั้นพิมพ์ str[i] else เพิ่ม mp[str[i]] ขึ้น 1
-
คืนจำนวน
-
พิมพ์ผลลัพธ์
ตัวอย่าง
#include <iostream> #include <unordered_map> using namespace std; // To count the number of characters whose // ascii value not in range [l, r] int count_non_char(string str, int left, int right){ int count = 0; // using map to print a character only once unordered_map<char, int> m; int len = str.length(); for (int i = 0; i < len; i++) { if (!(left <= str[i] and str[i] <= right)){ count++; if (m[str[i]] != 1){ cout << str[i] << " "; m[str[i]]++; } } } // return the count return count; } // main code int main(){ string str = "tutorialspoint"; int left = 102, right = 111; cout << "Characters and "; cout << "\nand count in the given range is: " << count_non_char(str, left, right); return 0; }
ผลลัพธ์
หากเราเรียกใช้โค้ดข้างต้น มันจะสร้างผลลัพธ์ต่อไปนี้ -
Characters and and count in the given range is: t u r a s p 8