একটি ইংরেজি অক্ষরধরন স্ট্রিং দেওয়া আছে। প্রতিটি অক্ষরের অ্যালফাবেটে পজিশন (A=1, B=2, ..., Z=26) বের করতে হবে বিট অপারেশন ব্যবহার করে। কেস-ইনসেনসিটিভ (অবস্থা কেসensitive না)।
উদাহরণ
ইনপুট: "TutorialsPoint"
আউটপুট: 20 21 20 15 18 9 1 12 19 16 15 9 14 20
বিট ট্রিক
ASCII-এ বড় হাতের (uppercase) অক্ষরগুলো: 'A'=65 (01000001) থেকে 'Z'=90 (01011010)।
ছোট হাতের (lowercase): 'a'=97 (01100001) থেকে 'z'=122 (01111010)।
দউভয়ের লাস্ট ৫ বিট (০-৩১) একই: 'A' & 31 = 1, 'a' & 31 = 1।
সুতরাং: position = char & 31 (যেহেতু 31 = 0b11111)।
C++ প্রোগ্রাম
#include <iostream>
#include <string>
using namespace std;
void findLetterPosition(string str, int n) {
for (int i = 0; i < n; i++) {
cout << (str[i] & 31) << " ";
}
}
int main() {
string str = "TutorialsPoint";
int n = str.length();
cout << "The letters position in string " << str << " is \n";
findLetterPosition(str, n);
return 0;
}
আউটপুট
The letters position in string TutorialsPoint is 20 21 20 15 18 9 1 12 19 16 15 9 14 20
ব্যাখ্যা
31 = 0b11111(৫ বিট মাস্ক)।char & 31নিচের ৫ বিট বাদে সব বিৎ ০ করে দেয়।- ASCII-এ A-Z এবং a-z-এর নিচের ৫ বিটই ১-২৬ কোড করে।
- নন-অ্যালফাবেটিক ক্যারেক্টারের জন্য এটি বोगাস মান দেবে (যেমন স্পেস=০, ডিজিট=ডিজিট ভ্যালু)।
সীমাবদ্ধতা
- শুধু ইংরেজি অ্যালফাবেট (A-Z, a-z) এর জন্য সঠিক।
- ইনপুট ভ্যালিডেশন যোগ করুন যদি অন্য ক্যারেক্টার থাকতে পারে।
বিকল্প পদ্ধতি (নন-বিট)
// Uppercase: pos = ch - 'A' + 1; // Lowercase: pos = ch - 'a' + 1; // Generic: pos = tolower(ch) - 'a' + 1;