अध्याय 8: C++ में स्ट्रिंग्स (Strings in C++)

अध्याय 8: C++ में स्ट्रिंग्स (Strings in C++)

C++ प्रोग्रामिंग में, स्ट्रिंग्स (Strings) एक महत्वपूर्ण डेटा प्रकार हैं, जिनका उपयोग टेक्स्ट या वर्णों (characters) के अनुक्रम को संग्रहीत और प्रबंधित करने के लिए किया जाता है। स्ट्रिंग्स का उपयोग करके आप शब्द, वाक्य, या किसी भी प्रकार का टेक्स्ट डेटा अपने प्रोग्राम में शामिल कर सकते हैं। इस अध्याय में, हम C++ में स्ट्रिंग्स की विभिन्न अवधारणाओं को समझेंगे, जैसे कि char arrays और std::string क्लास। हम देखेंगे कि स्ट्रिंग्स को कैसे बनाते हैं, उन्हें कैसे जोड़ते हैं, उनकी तुलना कैसे करते हैं, और उनके साथ विभिन्न प्रकार के ऑपरेशन्स कैसे करते हैं। इस अध्याय के अंत तक, आप स्ट्रिंग्स के साथ कुशलतापूर्वक काम करने की क्षमता प्राप्त कर लेंगे, जिससे आप अपने प्रोग्राम में टेक्स्ट डेटा को प्रभावी ढंग से प्रबंधित कर सकते हैं।

स्ट्रिंग्स का परिचय (Introduction to Strings)

C++ में, स्ट्रिंग्स (Strings) टेक्स्ट डेटा या वर्णों (characters) के अनुक्रम को संग्रहीत करने और प्रबंधित करने के लिए उपयोग की जाने वाली डेटा संरचना है। स्ट्रिंग्स का उपयोग करके आप शब्द, वाक्य, और विभिन्न प्रकार के टेक्स्ट को आसानी से प्रोग्राम में शामिल कर सकते हैं। C++ में स्ट्रिंग्स को मुख्य रूप से दो तरीकों से संभाला जा सकता है: char arrays और std::string क्लास का उपयोग करके।

1. char एर्रे के रूप में स्ट्रिंग्स:

C++ में स्ट्रिंग्स को पारंपरिक रूप से char एर्रे के रूप में प्रस्तुत किया जाता था। char एर्रे एक शृंखला (sequence) होती है जिसमें कई वर्ण (characters) संग्रहीत होते हैं, और यह null character (\0) से समाप्त होता है, जो स्ट्रिंग के अंत का संकेत देता है।

उदाहरण:

char name[] = "John Doe";

इस उदाहरण में, name एक char एर्रे है जिसमें “John Doe” स्ट्रिंग संग्रहीत है। एर्रे के अंत में null character (\0) अपने आप जुड़ जाता है।

2. std::string क्लास का उपयोग:

हालाँकि char एर्रे का उपयोग करना संभव है, लेकिन C++ में स्ट्रिंग्स को संभालने के लिए अधिक सुविधाजनक और सुरक्षित तरीका std::string क्लास का उपयोग करना है, जो कि C++ स्टैंडर्ड लाइब्रेरी का हिस्सा है। std::string क्लास का उपयोग करके, आप स्ट्रिंग्स के साथ काम करने के लिए कई अंतर्निहित फ़ंक्शन्स और ऑपरेशन्स का लाभ उठा सकते हैं, जैसे कि जोड़ना, तुलना करना, खोजना, आदि।

उदाहरण:

#include <iostream>
#include <string>
using namespace std;

int main() {
    string name = "John Doe";
    cout << "Name: " << name << endl;
    return 0;
}

इस उदाहरण में, name एक std::string प्रकार की स्ट्रिंग है जो “John Doe” को संग्रहीत करती है।

3. स्ट्रिंग्स के साथ सामान्य ऑपरेशन्स:

std::string क्लास के साथ, आप स्ट्रिंग्स के साथ निम्नलिखित सामान्य ऑपरेशन्स कर सकते हैं:

  • स्ट्रिंग्स जोड़ना (Concatenation):
    string firstName = "John";
    string lastName = "Doe";
    string fullName = firstName + " " + lastName;
    

     

  • स्ट्रिंग्स की लंबाई पाना (Length):
    string text = "Hello, World!";
    cout << "Length: " << text.length() << endl;
    

     

  • स्ट्रिंग्स की तुलना करना (Comparison):
    string str1 = "apple";
    string str2 = "banana";
    if (str1 < str2) {
        cout << str1 << " comes before " << str2 << endl;
    }
    

     

  • स्ट्रिंग्स के किसी हिस्से को निकालना (Substring):
    string text = "Hello, World!";
    string sub = text.substr(0, 5); // "Hello" को निकालता है
    

     

स्ट्रिंग्स के साथ काम करना (Working with Strings)

C++ में स्ट्रिंग्स के साथ काम करना एक महत्वपूर्ण कौशल है, खासकर जब आपका प्रोग्राम टेक्स्ट डेटा के साथ इंटरैक्ट करता है। C++ में स्ट्रिंग्स को प्रबंधित करने के लिए std::string क्लास एक शक्तिशाली और सुविधाजनक तरीका प्रदान करता है। इस सेक्शन में, हम देखेंगे कि कैसे आप स्ट्रिंग्स बना सकते हैं, उन्हें जोड़ सकते हैं, उनकी तुलना कर सकते हैं, और अन्य सामान्य ऑपरेशन्स कर सकते हैं।

1. स्ट्रिंग बनाना (Creating Strings)

C++ में एक स्ट्रिंग बनाना सरल है। आप इसे सीधे प्रारंभिक मान के साथ घोषित कर सकते हैं:

#include <iostream>
#include <string>
using namespace std;

int main() {
    string greeting = "Hello, World!";
    cout << "Greeting: " << greeting << endl;
    return 0;
}

2. स्ट्रिंग्स जोड़ना (Concatenation of Strings)

स्ट्रिंग्स को जोड़ने के लिए आप + ऑपरेटर का उपयोग कर सकते हैं:

#include <iostream>
#include <string>
using namespace std;

int main() {
    string firstName = "John";
    string lastName = "Doe";
    string fullName = firstName + " " + lastName;

    cout << "Full Name: " << fullName << endl;
    return 0;
}

इस उदाहरण में, firstName और lastName को जोड़कर fullName स्ट्रिंग बनाई गई है।

3. स्ट्रिंग्स की लंबाई पाना (Finding the Length of a String)

स्ट्रिंग की लंबाई जानने के लिए आप length() या size() फ़ंक्शन का उपयोग कर सकते हैं:

#include <iostream>
#include <string>
using namespace std;

int main() {
    string text = "Hello, World!";
    cout << "Length: " << text.length() << endl;
    return 0;
}

इस उदाहरण में, text स्ट्रिंग की लंबाई 13 है।

4. स्ट्रिंग्स की तुलना करना (Comparing Strings)

आप ==, !=, <, > जैसे ऑपरेटरों का उपयोग करके स्ट्रिंग्स की तुलना कर सकते हैं:

#include <iostream>
#include <string>
using namespace std;

int main() {
    string str1 = "apple";
    string str2 = "banana";

    if (str1 == str2) {
        cout << "Both strings are equal." << endl;
    } else if (str1 < str2) {
        cout << str1 << " comes before " << str2 << endl;
    } else {
        cout << str1 << " comes after " << str2 << endl;
    }

    return 0;
}

5. स्ट्रिंग्स से उप-स्ट्रिंग निकालना (Extracting a Substring)

substr() फ़ंक्शन का उपयोग करके आप एक स्ट्रिंग से उप-स्ट्रिंग निकाल सकते हैं:

#include <iostream>
#include <string>
using namespace std;

int main() {
    string text = "Hello, World!";
    string sub = text.substr(0, 5);  // "Hello" निकालता है

    cout << "Substring: " << sub << endl;
    return 0;
}

इस उदाहरण में, substr(0, 5) “Hello” उप-स्ट्रिंग को निकालता है।

6. स्ट्रिंग्स में खोज (Searching within a String)

स्ट्रिंग में किसी विशेष चरित्र या सबस्ट्रिंग को खोजने के लिए आप find() फ़ंक्शन का उपयोग कर सकते हैं:

#include <iostream>
#include <string>
using namespace std;

int main() {
    string text = "Hello, World!";
    size_t found = text.find("World");

    if (found != string::npos) {
        cout << "'World' found at: " << found << endl;
    } else {
        cout << "'World' not found" << endl;
    }

    return 0;
}

7. स्ट्रिंग्स को संशोधित करना (Modifying Strings)

आप किसी विशेष चरित्र को बदलने या हटाने के लिए replace() और erase() जैसे फ़ंक्शन्स का उपयोग कर सकते हैं:

#include <iostream>
#include <string>
using namespace std;

int main() {
    string text = "Hello, World!";
    
    // "World" को "C++" से बदलना
    text.replace(7, 5, "C++");

    cout << "Modified String: " << text << endl;

    // "C++" को हटाना
    text.erase(7, 3);

    cout << "After Erase: " << text << endl;

    return 0;
}

स्ट्रिंग इनपुट/आउटपुट C++ में (String Input/Output in C++)

C++ में स्ट्रिंग्स के साथ इनपुट और आउटपुट करना एक सामान्य और महत्वपूर्ण कार्य है। स्ट्रिंग्स को इनपुट के रूप में लेना और उन्हें आउटपुट के रूप में प्रदर्शित करना, दोनों कार्य cin, getline(), और cout का उपयोग करके आसानी से किए जा सकते हैं। आइए देखें कि C++ में स्ट्रिंग्स के इनपुट और आउटपुट को कैसे प्रबंधित किया जाता है।

1. स्ट्रिंग इनपुट (String Input)

a. cin का उपयोग करके स्ट्रिंग इनपुट:

cin का उपयोग करके आप किसी स्ट्रिंग को इनपुट के रूप में ले सकते हैं। हालाँकि, यह केवल पहले स्पेस (space) तक ही स्ट्रिंग को पढ़ता है।

#include <iostream>
#include <string>
using namespace std;

int main() {
    string name;
    
    cout << "Enter your name: ";
    cin >> name;  // `cin` केवल पहले स्पेस तक पढ़ेगा

    cout << "Hello, " << name << "!" << endl;

    return 0;
}

इस कोड में, यदि उपयोगकर्ता “John Doe” टाइप करता है, तो cin केवल “John” को ही पढ़ेगा क्योंकि cin स्पेस के बाद का हिस्सा नहीं लेता है।

b. getline() का उपयोग करके स्ट्रिंग इनपुट:

यदि आपको पूरी पंक्ति (लाइन) को इनपुट के रूप में पढ़ना है, जिसमें स्पेस भी शामिल हो, तो आप getline() का उपयोग कर सकते हैं।

#include <iostream>
#include <string>
using namespace std;

int main() {
    string fullName;

    cout << "Enter your full name: ";
    getline(cin, fullName);  // `getline` पूरे लाइन को पढ़ेगा

    cout << "Hello, " << fullName << "!" << endl;

    return 0;
}

इस कोड में, यदि उपयोगकर्ता “John Doe” टाइप करता है, तो getline() पूरी स्ट्रिंग “John Doe” को इनपुट के रूप में लेगा।

2. स्ट्रिंग आउटपुट (String Output)

स्ट्रिंग को आउटपुट के रूप में प्रदर्शित करने के लिए cout का उपयोग किया जाता है:

#include <iostream>
#include <string>
using namespace std;

int main() {
    string greeting = "Hello, World!";
    
    cout << greeting << endl;  // स्ट्रिंग को आउटपुट में प्रदर्शित करना

    return 0;
}

इस कोड में, greeting स्ट्रिंग को cout का उपयोग करके कंसोल में आउटपुट किया गया है।

उदाहरण: इनपुट और आउटपुट को मिलाकर

#include <iostream>
#include <string>
using namespace std;

int main() {
    string fullName;

    // उपयोगकर्ता से पूरा नाम इनपुट लेना
    cout << "Enter your full name: ";
    getline(cin, fullName);

    // उपयोगकर्ता के नाम का अभिवादन संदेश प्रदर्शित करना
    cout << "Welcome, " << fullName << "!" << endl;

    return 0;
}

स्ट्रिंग्स और stringstream का उपयोग C++ में (Using Strings and stringstream in C++)

C++ में stringstream एक बहुमुखी टूल है जो स्ट्रिंग्स के साथ इनपुट और आउटपुट संचालन को और अधिक शक्तिशाली और लचीला बनाता है। stringstream C++ के <sstream> हेडर में परिभाषित एक क्लास है, जो आपको स्ट्रिंग्स को स्ट्रीम के रूप में उपयोग करने की अनुमति देता है। इसका उपयोग स्ट्रिंग्स को तोड़ने, उनके साथ गणनाएँ करने, या विभिन्न प्रकार के डेटा को स्ट्रिंग में परिवर्तित करने के लिए किया जा सकता है।

1. stringstream का परिचय

stringstream को आप इनपुट और आउटपुट दोनों के लिए उपयोग कर सकते हैं। यह C++ के cin और cout की तरह ही काम करता है, लेकिन यह स्ट्रीमिंग ऑपरेशंस को एक स्ट्रिंग पर करता है।

a. stringstream का निर्माण और उपयोग:

#include <iostream>
#include <sstream>
#include <string>
using namespace std;

int main() {
    stringstream ss;  // stringstream ऑब्जेक्ट का निर्माण

    ss << "Hello, ";  // आउटपुट के लिए स्ट्रिंग जोड़ना
    ss << "World!";   // दूसरी स्ट्रिंग जोड़ना

    string result = ss.str();  // परिणाम स्ट्रिंग के रूप में प्राप्त करना

    cout << result << endl;  // परिणाम को आउटपुट में प्रदर्शित करना

    return 0;
}

इस उदाहरण में, stringstream का उपयोग “Hello, ” और “World!” को जोड़ने के लिए किया गया है, और फिर इस परिणाम को एक स्ट्रिंग में परिवर्तित कर दिया गया है।

2. स्ट्रिंग्स से डेटा को निकालना (Extracting Data from Strings)

stringstream का उपयोग स्ट्रिंग्स से डेटा निकालने के लिए भी किया जा सकता है, जैसे कि आप cin से इनपुट लेते समय करते हैं।

उदाहरण:

#include <iostream>
#include <sstream>
#include <string>
using namespace std;

int main() {
    string data = "123 456 789";
    stringstream ss(data);  // stringstream ऑब्जेक्ट का निर्माण और स्ट्रिंग से प्रारंभिककरण

    int num1, num2, num3;
    ss >> num1 >> num2 >> num3;  // स्ट्रिंग से संख्याओं को निकालना

    cout << "Numbers are: " << num1 << ", " << num2 << ", " << num3 << endl;

    return 0;
}

इस उदाहरण में, data स्ट्रिंग से तीन अलग-अलग संख्याओं को stringstream के माध्यम से निकालकर वेरिएबल्स num1, num2, और num3 में संग्रहीत किया गया है।

3. डेटा को स्ट्रिंग में बदलना (Converting Data to String)

आप किसी भी डेटा प्रकार को stringstream का उपयोग करके स्ट्रिंग में बदल सकते हैं। यह विशेष रूप से तब उपयोगी होता है जब आपको संख्याओं, बूलियन मानों, या अन्य डेटा को स्ट्रिंग्स में बदलना हो।

उदाहरण:

#include <iostream>
#include <sstream>
#include <string>
using namespace std;

int main() {
    int year = 2024;
    double price = 99.99;

    stringstream ss;
    ss << "Year: " << year << ", Price: $" << price;

    string result = ss.str();  // परिणाम स्ट्रिंग के रूप में प्राप्त करना

    cout << result << endl;  // परिणाम को आउटपुट में प्रदर्शित करना

    return 0;
}

इस उदाहरण में, year और price को stringstream का उपयोग करके एक स्ट्रिंग में बदल दिया गया है।

4. स्ट्रिंग्स को भागों में विभाजित करना (Splitting Strings into Parts)

stringstream का उपयोग स्ट्रिंग्स को उनके घटकों में विभाजित करने के लिए भी किया जा सकता है, खासकर तब जब स्ट्रिंग्स में कई मान हों जो अलग-अलग वेरिएबल्स में संग्रहीत किए जाने चाहिए।

उदाहरण:

#include <iostream>
#include <sstream>
#include <string>
using namespace std;

int main() {
    string data = "John,25,Developer";
    stringstream ss(data);

    string name;
    int age;
    string profession;

    getline(ss, name, ',');
    ss >> age;
    ss.ignore();  // ',' को इग्नोर करना
    getline(ss, profession);

    cout << "Name: " << name << ", Age: " << age << ", Profession: " << profession << endl;

    return 0;
}

इस उदाहरण में, स्ट्रिंग को stringstream और getline() का उपयोग करके नाम, उम्र, और पेशे में विभाजित किया गया है।

C++ में स्ट्रिंग्स के लिए इनबिल्ट फ़ंक्शन्स की तालिका:

Function Syntax Description
length() string_name.length() स्ट्रिंग की लंबाई (characters की संख्या) लौटाता है।
size() string_name.size() स्ट्रिंग की लंबाई (characters की संख्या) लौटाता है। length() का समानार्थी।
empty() string_name.empty() जांचता है कि स्ट्रिंग खाली है या नहीं। यदि स्ट्रिंग खाली है तो true लौटाता है।
clear() string_name.clear() स्ट्रिंग की सभी सामग्री को हटाता है, इसे खाली बना देता है।
substr() string_name.substr(pos, len) स्ट्रिंग के भीतर से pos स्थिति से शुरू होकर len की लंबाई की उप-स्ट्रिंग लौटाता है।
append() string_name.append(str) दी गई स्ट्रिंग str को मौजूदा स्ट्रिंग के अंत में जोड़ता है।
insert() string_name.insert(pos, str) दी गई स्ट्रिंग str को pos स्थिति पर मौजूदा स्ट्रिंग में सम्मिलित करता है।
replace() string_name.replace(pos, len, str) स्ट्रिंग के pos स्थिति से len लंबाई के हिस्से को नई स्ट्रिंग str से बदलता है।
erase() string_name.erase(pos, len) स्ट्रिंग से pos स्थिति से len लंबाई तक के हिस्से को हटा देता है।
find() string_name.find(str) स्ट्रिंग के भीतर दी गई उप-स्ट्रिंग str की पहली उपस्थिति का इंडेक्स लौटाता है।
rfind() string_name.rfind(str) स्ट्रिंग के भीतर दी गई उप-स्ट्रिंग str की अंतिम उपस्थिति का इंडेक्स लौटाता है।
compare() string_name.compare(str) मौजूदा स्ट्रिंग को दी गई स्ट्रिंग str से तुलना करता है, और तुलना का परिणाम (0, <0, >0) लौटाता है।
c_str() string_name.c_str() C-शैली की null-terminated स्ट्रिंग (const char*) के रूप में स्ट्रिंग की एक प्रति लौटाता है।
begin() string_name.begin() स्ट्रिंग के पहले character का iterator लौटाता है।
end() string_name.end() स्ट्रिंग के अंतिम character के बाद के खाली स्थान का iterator लौटाता है।
resize() string_name.resize(new_size) स्ट्रिंग का आकार बदलता है और इसे new_size लंबाई में सेट करता है।
swap() string_name.swap(other_string) मौजूदा स्ट्रिंग की सामग्री को other_string के साथ स्वैप (बदल) करता है।
strcat() strcat(destination, source) source स्ट्रिंग को destination स्ट्रिंग के अंत में जोड़ता है।
strrchr() strrchr(str, ch) दी गई स्ट्रिंग str में ch की अंतिम उपस्थिति का पॉइंटर लौटाता है।
strncpy() strncpy(destination, source, num) source स्ट्रिंग के पहले num characters को destination में कॉपी करता है।
strncmp() strncmp(str1, str2, num) str1 और str2 के पहले num characters की तुलना करता है।
substr() string_name.substr(pos, len) std::string का फ़ंक्शन, जो pos स्थिति से len लंबाई की उप-स्ट्रिंग लौटाता है।
pop_back() string_name.pop_back() std::string का फ़ंक्शन, जो स्ट्रिंग के अंतिम character को हटाता है।
push_back() string_name.push_back(ch) std::string का फ़ंक्शन, जो स्ट्रिंग के अंत में ch character जोड़ता है।


Table of Contents

Index