C++ में std::string और int को कैसे जोड़ें: छिपी हुई समस्याएं
\n\nक्या आपने कभी C++ में "Hello" + 42 जैसा कुछ लिखा है और अपेक्षित "Hello42" के बजाय अजीब वर्णों का एक सेट प्राप्त किया है? यदि हाँ — तो आप अकेले नहीं हैं। Stack Overflow पर इस प्रश्न को दसियों हज़ार बार देखा गया है, और यह व्यर्थ नहीं है। C++ में, स्ट्रिंग और संख्या का संयोजन Python या JavaScript जितना सरल नहीं है। यहाँ कुछ तरकीबें जानना आवश्यक है।
इस लेख में, हम std::string और int को जोड़ने के 4 तरीके देखेंगे, सबसे सरल से लेकर पेशेवर तक। आप जानेंगे कि str + num क्यों काम नहीं करता, इस सीमा को कैसे दूर करें, और अपने कार्य के लिए कौन सी विधि चुनें। चलिए शुरू करते हैं!
str + int क्यों काम नहीं करता? प्रकारों के बारे में संक्षेप में
\n\nC++ में, std::string एक क्लास है, और int एक अंतर्निहित संख्यात्मक प्रकार है। std::string के लिए + ऑपरेटर ओवरलोडेड है, लेकिन यह दूसरे ऑपरेंड को भी स्ट्रिंग प्रकार (std::string, const char*, या वर्ण) होने की अपेक्षा करता है। जब आप "Hello" + 42 लिखते हैं, तो कंपाइलर 42 को स्ट्रिंग लिटरल के पॉइंटर के लिए अंकगणितीय ऑफ़सेट के रूप में व्याख्या करने का प्रयास करता है, न कि डालने के लिए संख्या के रूप में।
परिणाम? अपरिभाषित व्यवहार, प्रोग्राम क्रैश, या मेमोरी में कचरा। यही कारण है कि हमें विशेष रूपांतरण विधियों की आवश्यकता है।
\n\nविधि 1: std::to_string — सबसे सरल (C++11 और नया)
\n\nC++11 से शुरू करके, मानक लाइब्रेरी में एक शानदार फ़ंक्शन std::to_string जोड़ा गया। यह किसी भी संख्या (int, float, double, long, आदि) को std::string में बदलता है। फिर — दो स्ट्रिंग्स का सरल संयोजन।
#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नुकसान: फ़ॉर्मेटिंग पर कोई नियंत्रण नहीं (दशमलव के बाद अंकों की संख्या, अग्रणी शून्य)।
विधि 2: std::ostringstream — फ़ॉर्मेटिंग का राजा
\n\nयदि आपको केवल जोड़ना ही नहीं, बल्कि संख्या को फ़ॉर्मेट भी करना है (अग्रणी शून्य जोड़ना, भिन्नात्मक भाग को सीमित करना), तो हेडर फ़ाइल <sstream> से std::ostringstream का उपयोग करें। यह दृष्टिकोण cout के काम की नकल करता है, लेकिन परिणाम को स्ट्रिंग में सहेजता है।
#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> जोड़ने की आवश्यकता।
विधि 3: sprintf / snprintf — C की विरासत (सावधानी से!)
\n\nयदि आप पुराने कोड के साथ काम कर रहे हैं या किसी कारण से उपयोग नहीं कर सकते हैं