Computer >> Máy Tính >  >> Lập trình >> C ++

Đếm và in các bảng chữ cái có giá trị ASCII không nằm trong phạm vi [l, r] trong C ++

Chúng tôi được cung cấp với một chuỗi có độ dài bất kỳ và nhiệm vụ là tính số lượng và in các bảng chữ cái trong một chuỗi có giá trị ASCII không thuộc phạm vi [l, r]

Giá trị ASCII cho ký tự A-Z được đưa ra bên dưới

A B C D E F G H Tôi J K L M N O P Hỏi R S
65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83


T Ư V W X Y Z
84 85 86 87 88 89 90

Giá trị ASCII cho các ký tự a-z được đưa ra bên dưới

a b c d e f g h i j k l m n o p q r s
9
7
9
số 8
9
9
10
0
10
1
10
2
10
3
10
4
10
5
10
6
10
7
10
số 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

Ví dụ

Input − String str = “point
      First = 111, Last = 117
Output − characters not in the given range are: i, n
      Count is: 2

Giải thích - vì i và n không nằm trong phạm vi [111, 117] nên các ký tự này sẽ được tính.

Input − String str = “ABCZXY
      First = 65, Last = 70
Output − characters in the given range are: A, B, C
      Count is: 3

Giải thích - vì Z, X và Y không nằm trong phạm vi [65, 70] nên các ký tự này sẽ được tính.

Phương pháp tiếp cận được sử dụng trong chương trình dưới đây như sau

  • Nhập chuỗi, giá trị bắt đầu và giá trị kết thúc để tạo phạm vi và lưu trữ nó trong các biến, giả sử là str.

  • Tính độ dài của chuỗi bằng cách sử dụng hàm length () sẽ trả về một giá trị nguyên theo số chữ cái trong chuỗi bao gồm cả khoảng trắng.

  • Lấy một biến tạm thời sẽ lưu trữ số lượng ký tự và tạo một bản đồ, giả sử là mp

  • Bắt đầu vòng lặp từ i đến 0 cho đến khi tôi nhỏ hơn độ dài của chuỗi

  • Bên trong vòng lặp, hãy kiểm tra xem bắt đầu có nhỏ hơn không bằng str [i] và str [i] nhỏ hơn không bằng kết thúc hay không

  • Bên trong if, hãy kiểm tra xem mp [str [i]]! =1 sau đó in str [i] else tăng mp [str [i]] lên 1

  • Trả lại số lượng

  • In kết quả

Ví dụ

#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;
}

Đầu ra

Nếu chúng ta chạy đoạn mã trên, nó sẽ tạo ra kết quả sau -

Characters and
and count in the given range is: t u r a s p 8