C++ में स्ट्रिंग और संख्या को जोड़ना: शुरुआती लोगों के लिए पूर्ण गाइड

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

C++ में std::string और int को कैसे जोड़ें: छिपी हुई समस्याएं

\n\n

क्या आपने कभी C++ में "Hello" + 42 जैसा कुछ लिखा है और अपेक्षित "Hello42" के बजाय अजीब वर्णों का एक सेट प्राप्त किया है? यदि हाँ — तो आप अकेले नहीं हैं। Stack Overflow पर इस प्रश्न को दसियों हज़ार बार देखा गया है, और यह व्यर्थ नहीं है। C++ में, स्ट्रिंग और संख्या का संयोजन Python या JavaScript जितना सरल नहीं है। यहाँ कुछ तरकीबें जानना आवश्यक है।

\n\n

इस लेख में, हम std::string और int को जोड़ने के 4 तरीके देखेंगे, सबसे सरल से लेकर पेशेवर तक। आप जानेंगे कि str + num क्यों काम नहीं करता, इस सीमा को कैसे दूर करें, और अपने कार्य के लिए कौन सी विधि चुनें। चलिए शुरू करते हैं!

\n\n

str + int क्यों काम नहीं करता? प्रकारों के बारे में संक्षेप में

\n\n

C++ में, std::string एक क्लास है, और int एक अंतर्निहित संख्यात्मक प्रकार है। std::string के लिए + ऑपरेटर ओवरलोडेड है, लेकिन यह दूसरे ऑपरेंड को भी स्ट्रिंग प्रकार (std::string, const char*, या वर्ण) होने की अपेक्षा करता है। जब आप "Hello" + 42 लिखते हैं, तो कंपाइलर 42 को स्ट्रिंग लिटरल के पॉइंटर के लिए अंकगणितीय ऑफ़सेट के रूप में व्याख्या करने का प्रयास करता है, न कि डालने के लिए संख्या के रूप में।

\n\n

परिणाम? अपरिभाषित व्यवहार, प्रोग्राम क्रैश, या मेमोरी में कचरा। यही कारण है कि हमें विशेष रूपांतरण विधियों की आवश्यकता है।

\n\n

विधि 1: std::to_string — सबसे सरल (C++11 और नया)

\n\n

C++11 से शुरू करके, मानक लाइब्रेरी में एक शानदार फ़ंक्शन std::to_string जोड़ा गया। यह किसी भी संख्या (int, float, double, long, आदि) को std::string में बदलता है। फिर — दो स्ट्रिंग्स का सरल संयोजन।

\n\n
#include <iostream>\n#include <string>\n\nint main() {\n    std::string text = "पाई का मान लगभग है ";\n    int pi_int = 3;\n\n    // int को स्ट्रिंग में बदलें और जोड़ें\n    std::string result = text + std::to_string(pi_int);\n    std::cout << result << std::endl; // आउटपुट: पाई का मान लगभग है 3\n\n    // एक पंक्ति में भी किया जा सकता है\n    std::cout << "उत्तर: " + std::to_string(42) << std::endl;\n\n    return 0;\n}
\n\n

लाभ: पढ़ने योग्य, संक्षिप्त, अतिरिक्त लाइब्रेरी ( <string> के अलावा) जोड़ने की आवश्यकता नहीं।
\nनुकसान: फ़ॉर्मेटिंग पर कोई नियंत्रण नहीं (दशमलव के बाद अंकों की संख्या, अग्रणी शून्य)।

\n\n

विधि 2: std::ostringstream — फ़ॉर्मेटिंग का राजा

\n\n

यदि आपको केवल जोड़ना ही नहीं, बल्कि संख्या को फ़ॉर्मेट भी करना है (अग्रणी शून्य जोड़ना, भिन्नात्मक भाग को सीमित करना), तो हेडर फ़ाइल <sstream> से std::ostringstream का उपयोग करें। यह दृष्टिकोण cout के काम की नकल करता है, लेकिन परिणाम को स्ट्रिंग में सहेजता है।

\n\n
#include <iostream>\n#include <sstream>\n#include <string>\n#include <iomanip> // std::setw और std::setfill के लिए\n\nint main() {\n    int user_id = 7;\n    std::ostringstream oss;\n\n    // फ़ॉर्मेट करें: 3 अंकों तक अग्रणी शून्य के साथ ID\n    oss << "उपयोगकर्ता #" << std::setw(3) << std::setfill('0') << user_id;\n    std::string formatted = oss.str();\n\n    std::cout << formatted << std::endl; // आउटपुट: उपयोगकर्ता #007\n\n    // अधिक जटिल उदाहरण: भिन्नात्मक संख्या\n    double price = 19.5;\n    std::ostringstream oss2;\n    oss2 << "मूल्य: " << std::fixed << std::setprecision(2) << price << " रुपये";\n    std::cout << oss2.str() << std::endl; // आउटपुट: मूल्य: 19.50 रुपये\n\n    return 0;\n}
\n\n

लाभ: फ़ॉर्मेटिंग पर पूर्ण नियंत्रण, किसी भी प्रकार के साथ काम करता है।
\nनुकसान: अधिक शब्दाडंबरपूर्ण कोड, <sstream> और <iomanip> जोड़ने की आवश्यकता।

\n\n

विधि 3: sprintf / snprintf — C की विरासत (सावधानी से!)

\n\n

यदि आप पुराने कोड के साथ काम कर रहे हैं या किसी कारण से उपयोग नहीं कर सकते हैं

ब्लॉग

पुस्तक अनुशंसाएँ