স্ট্রিং হল এক ধরণের অবজেক্ট, যাতে থাকে ক্যারেক্টারের সমষ্টি। এটা অনেকটা সি-এর অ্যারের মতই কাজ করে। তবে পার্থক্য হল, এটি ব্যবহার করা তুলনামূলকভাবে অনেক সহজ! এর জন্য আমাদের ইনক্লুড করতে হবে string হেডার ফাইল।

আমরা স্ট্রিং ডিক্লেয়ার করার জন্য লিখবোঃ

string name;

একটি কোড লিখে ফেলা যাক, তাহলেই বুঝতে সুবিধা হবে।

#include <iostream>
#include <string>
using namespace std;
int main() {
    string str1, str2;
    return 0;
}

আমরা str1 আর str2 নামের দু’টি স্ট্রিং ডিক্লেয়ার করে ফেলেছি!

এবার দেখা যাক ইনপুট নিব কেমনে?

ইনপুট নেওয়াটাও অনেক সোজা। সরাসরি cin ব্যবহার করে আমরা ইনপুট নিতে পারবো। ইনপুট ঠিক মত নেওয়া হল কি না, সেটা চেক করে দেখি cout ব্যবহার করে।

#include <iostream>
#include <string>
using namespace std;
int main() {
    string str1, str2;
    cin >> str1;
    cout << "Input: " << str1 << endl;
    return 0;
}

এটি রান করলে আউটপুট হবে নিচের মত।
Snap 2015-06-05 at 17.56.13

অর্থাৎ আমরা ইনপুট নেওয়া আর আউটপুট দেওয়া শিখে ফেলেছি!

ধর আমরা এবার চাই, এই স্ট্রিং-টার একটা কপি বানাতে।

ভেক্টরের মত এটাও শুধু একটা = অপারেটর দিয়েই করে ফেলা যায়!

#include <iostream>
#include <string>
using namespace std;
int main() {
    string str1, clone;
    cin >> str1;
    clone = str1;
    cout << "Input: " << str1 << endl;
    cout << "Clone: " << clone << endl;
    return 0;
}

 দুইটা স্ট্রিং জোড়া লাগানো

ক্যারেক্টার অ্যারেতে আমাদের দুইটা স্ট্রিং জোড়া লাগাতে কত কিছুই না করতে হত। এখন আমরা + অপারেটর ইউজ করেই কাজটা করে ফেলবো!

#include <iostream>
#include <string>
using namespace std;
int main() {
    string str1,str2;
    cin >> str1 >> str2;
    cout << "First Input: " << str1 << endl;
    cout << "Second Output: " << str2 << endl;
    cout << "Jora laganor por: " << str1+str2 << endl;
    return 0;
}

আমরা চাইলে str1+str2 অন্য একটা স্ট্রিং-এ স্টোর করেও রাখতে পারতাম!

আমরা চাইলে একাধিক স্ট্রিং-এর একটা ভেক্টরও ব্যবহার করতে পারিঃ

vector <string> setOfStrings;

#include <iostream>
#include <vector>
#include <string>
using namespace std;
int main() {
    vector <string> setOfStrings;
    setOfStrings.push_back("I");
    setOfStrings.push_back("Am");
    setOfStrings.push_back("Awesome");
    int i;
    for (i=0; i<setOfStrings.size(); i++) {
        cout << setOfStrings[i] << "\n";
    }
    return 0;
}

আমরা চাইলে ক্যারেক্টার অ্যারের মতই স্ট্রিং-এর বিভিন্ন ইন্ডেক্স অ্যাক্সেস করতে পারি str1[i] দিয়ে। যেমন,

#include <iostream>
#include <vector>
#include <string>
using namespace std;
int main() {
    string str1, str2;
    cin >> str1;
    cout << str1[0] << endl;
    str1[2] = '4';
    cout << str1 << endl;
    return 0;
}

আমরা আগের পর্বে ভেক্টরের জন্য যেসব ফাংশন দেখেছিলাম, সেগুলো string-এর ক্ষেত্রেও ব্যবহার করা যাবে।

(১)   str.empty()

এটা বুলিয়ান ভ্যালু রিটার্ন করে। যদি এম্পটি হয়, রিটার্ন করবে 1, না হলে ০।

(২) str.begin()

এটা স্ট্রিং-টি শুরুর অ্যাড্রেস রিটার্ন করবে।

(৩) str.end()

এটা স্ট্রিং-টি কোথায় শেষ হয়, সেটা রিটার্ন করবে।

(৪) str.erase(str.begin() + 7) // এখানে আমরা যে উপাদানটা ডিলিট করতে চাই, তার অ্যাড্রেস দিচ্ছি প্যারামিটার হিসেবে

এটা দিয়ে ৮ নাম্বার উপাদানটা মুছে দেওয়া যায়!

(৫) str1.swap(str2)

এটা দিয়ে দুইটা স্ট্রিং অদলবদল হয়ে যাবে।

(৬)  str.push_back(‘a’) // যে ক্যারেক্টারটা দিতে চাই, সেটা প্যারামিটার দিব

নতুন একটা ক্যারেক্টার স্ট্রিং-এর শেষে যোগ করে দেয়।

(৭) str.pop_back()

স্ট্রিং-এর শেষ ক্যারেক্টারটা মুছে দেয়।


আমি নিচে আরও কিছু ফাংশন দেখাবো। এগুলো খুব বেশি কাজে নাও লাগতে পারে। পড়াটা অপশনাল।

(১) রিলেশনাল অপারেটর

str1 == str2 – এটা চেক করবে দুইটা স্ট্রিং একই নাকি

str1 != str2 – এটা চেক করবে দুইটা স্ট্রিং ভিন্ন নাকি

str1 > str2 – এটা চেক করবে str1, str2 অপেক্ষা  লেক্সোগ্রাফিকালি বড় কি না

একইভাবে,

str1 >= str2

str1 <str2

str1 <= str2

#include <iostream>
#include <string>
using namespace std;
int main() {
    string str1, str2;
    str1 = "AAA";
    str2 = "AAB";

    if (str1==str2) cout << "AAA and AAB are equal\n";
    if (str1!=str2) cout << "AAA and AAB are not equal\n";
    if (str1< str2) cout << "AAA is less than AAB\n";
    if (str1> str2) cout << "AAA is greater than AAB\n";
    if (str1<=str2) cout << "AAA is less than or equal to AAB\n";
    if (str1>=str2) cout << "AAA is greater than or equal to AAB\n";

    return 0;
}

কোডটা রান করলে আউটপুট আসবে নিচের মত।

Snap 2015-06-05 at 18.32.46

কীভাবে কী হল, সেটা নিজেরাই চিন্তা করে বুঝে নাও। রিলেশনাল অপারেটরের ব্যাপারগুলোও ক্লিয়ার হয়ে যাবে!

(২) উপরের কাজটা  এভাবেও করা যায়ঃ

if (str1.compare(str2)

এটা ০ রিটার্ন করবে যখন স্ট্রিং দুইটা সমান।

-1 রিটার্ন করবে যদি str1, str2 অপেক্ষা ছোট হয়।

1 রিটার্ন করবে যদি str1, str2 অপেক্ষা বড় হয়।

(৩) কোনো সাবস্ট্রিং-এর পজিশন খুজে বের করা।

নিচের কোডটা একটা স্ট্রিং থেকে একটা সাবস্ট্রিং-এর পজিশন (ইনডেক্স) খুজে বের করে।

#include <iostream>
#include <string>
using namespace std;
int main() {
    string str1, str2;
    int pos;
    str1 = "I love my country, Bangladesh";
    pos = str1.find("Bangladesh");
    cout << pos;
    return 0;
}

(৪) স্ট্রিং কপি

এটা ব্যবহার করে একটা স্ট্রিং-এর একটা নির্দিষ্ট অংশ অন্য স্ট্রিং-এ কপি করে নেওয়া যায়। এজন্য আমাদের জানতে হবে সাবস্ট্রিংটা কোথায় শুরু হয়, এবং এর দৈর্ঘ্য কত। নিচের কোডটা দেখঃ

#include <iostream>
#include <string>
using namespace std;
int main() {
    string str1, str2;
    int pos;
    str1 = "I love my country, Bangladesh";
    pos = str1.find("Bangladesh");
    str2 = str1.substr(pos, 10); // karon "Bangladesh" er length 10, 3 diye dekho ki hoi!
    cout << str2;
    return 0;
}

আজকের মত এখানেই শেষ। পরের পর্বে আমরা দেখবো স্ট্যাক নিয়ে। ততদিন পর্যন্ত ভাল থাকবেন, সুস্থ থাকবেন। 🙂

Muntasir Wahed

Muntasir Wahed

System Administrator at স্বশিক্ষা.com
Jack of all trades, master of none.
Muntasir Wahed
Muntasir Wahed