কম্পিউটার টিউটোরিয়াল

C++-এ UTF-8 ভ্যালিডেশন


একটি পূর্ণসংখ্যা লিস্ট দেওয়া আছে যা ডেটা রিপ্রেজেন্ট করে। এটি বৈধ UTF-8 এনকোডিং কিনা তা চেক করতে হবে। একটি UTF-8 ক্যারেক্টার ১ থেকে ৪ বাইট লম্বা হতে পারে। কিছু বৈশিষ্ট্য:

  • ১-বাইট ক্যারেক্টারের জন্য, প্রথম বিট ০, তারপর ইউনিকোড কোড।
  • n-বাইট ক্যারেক্টারের জন্য, প্রথম n বিট সব ১, n+1 বিট ০, তারপর n-1 বাইট যাদের সবচেয়ে গুরুত্বপূর্ণ ২ বিট 10।

এনকোডিং টেকনিক নিচের টেবিল অনুযায়ী:

ক্যারেক্টার নাম্বার রেঞ্জUTF-8 অক্টেট সিকোয়েন্স
0000 0000 0000 007F0xxxxxxx
0000 0080 0000 07FF110xxxxx 10xxxxxx
0000 0800 0000 FFFF1110xxxx 10xxxxxx 10xxxxxx
0001 0000 0010 FFFF11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

উদাহরণ: [197, 130, 1] রিপ্রেজেন্ট করে অক্টেট সিকোয়েন্স 11000101 10000010 00000001, তাই এটি true ফেরত দেবে। এটি ২-বাইট ক্যারেক্টারের পর ১-বাইট ক্যারেক্টারের জন্য বৈধ UTF-8।

সমাধানের ধাপগুলো:

  • cnt := 0
  • i = 0 থেকে data.size()-1 পর্যন্ত:
    • x := data[i]
    • যদি cnt == 0:
      • যদি x>>5 == 0b110, cnt = 1
      • অন্যথায় যদি x>>4 == 0b1110, cnt = 2
      • অন্যথায় যদি x>>3 == 0b11110, cnt = 3
      • অন্যথায় যদি x>>7 != 0, false ফেরত দিন
    • অন্যথায় যদি x>>6 != 0b10, false ফেরত দিন এবং cnt--
  • cnt == 0 হলে true ফেরত দিন।

উদাহরণ (C++)

#include <bits/stdc++.h> using namespace std; class Solution {    public:    bool validUtf8(vector<int>& data) {       int cnt = 0;       for(int i = 0; i <data.size(); i++){          int x = data[i];          if(!cnt){             if((x >> 5) == 0b110){                cnt = 1;             }             else if((x >> 4) == 0b1110){                cnt = 2;             }             else if((x >> 3) == 0b11110){                cnt = 3;             }             else if((x >> 7) != 0) return false;             } else {                if((x >> 6) != 0b10) return false;                cnt--;             }          }          return cnt == 0;       } }; main(){    Solution ob;    vector<int> v = {197,130,1};    cout << (ob.validUtf8(v)); }

ইনপুট

[197,130,1]

আউটপুট

1

  1. C++-এ এনক্যাপসুলেশন

  2. C++-এ আইডেন্টিফায়ার (Identifiers)

  3. লিনাক্সে C++-এর জন্য সেরা IDE কী?

  4. লিনাক্সে C++-এর জন্য সেরা IDE কী? (আলাদা লেখা)