c++ - मैं कंसल्ट char*को स्ट्रिंग में कनवर्ट कैसे कर सकता हूँ और फिर वापस चार*




string const (3)

ए: std::string क्लास के पास कंस्ट्रक्टर है जो char const* लेता है, इसलिए आप बस अपना रूपांतरण करने के लिए एक उदाहरण बनाते हैं।

बी: std::string उदाहरणों में एक c_str() सदस्य फ़ंक्शन होता है जो एक char const* जिसे आप वापस char const* कनवर्ट करने के लिए उपयोग कर सकते हैं।

auto my_cstr = "Hello";        // A
std::string s(my_cstr);        // A
// ... modify 's' ...
auto back_to_cstr = s.c_str(); // B

मैं सिर्फ सी ++ शुरू कर रहा हूं और मुझे समझ में आ रहा हूं कि मैं समझता हूं। मैं विधि में इनपुट को string में कनवर्ट करने की कोशिश कर रहा हूं, और उसके बाद स्ट्रिंग को हाइफ़न जोड़ने के लिए जहां मैं चाहता हूं और अंत में उस स्ट्रिंग को लेता हूं और इसे वापस लौटने के लिए char* परिवर्तित कर रहा हूं। अब तक जब मैं कोशिश करता हूं यह मुझे बस त्रुटि 10 देता है

char* getHyphen(const char* input){
    string vowels [12] = {"A","E","I","O","U","Y","a","e","i","o","u","y"};

    //convert char* to string
    string a;
    int i = 0;
    while(input != '\0'){
        a += input[i];
        input++;
        i++;
    }

    //convert string to char*

    return NULL;
}

सबसे पहले, इनपुट से std::string बनाने के लिए आपको उस सभी कोड की आवश्यकता नहीं है। आप बस का उपयोग कर सकते हैं:

string a(input);

जहां तक ​​एक नया char* लौटते हैं, आप इसका उपयोग कर सकते हैं:

return strdup(a.c_str());  // strdup is a non-standard function but it
                           // can be easily implemented if necessary.

वापस लौटा मूल्य को निरुपित करना सुनिश्चित करें।

यह सिर्फ एक std::string वापस करना बेहतर होगा ताकि आपके फ़ंक्शन के उपयोगकर्ताओं को स्मृति आवंटन / डेलोकेशन के बारे में चिंता न करें।

std::string getHyphen(const char* input){

char* उपयोग न करें std::string उपयोग करें, जैसे अन्य सभी आपको बता रहे हैं। यह ऐसी सभी समस्याओं को समाप्त करेगा

हालांकि, पूर्णता की खातिर और क्योंकि आप पृष्ठभूमि को समझना चाहते हैं, आइए देखें कि क्या हो रहा है।

while(input != '\0'){

आप शायद इसका अर्थ है:

while(*input != '\0') {

आपका कोड input पॉइंटर को खुद \0 से तुलना करता है, अर्थात यह एक अशक्त-सूचक के लिए जांचता है, जो कि \0 char से दुर्भाग्यपूर्ण स्वत: रूपांतरण के कारण होता है अगर आप तुलना करने की कोशिश करते हैं, तो कहें, 'x' या 'a' , तो आपको रनटाइम क्रैश के बजाय एक संकलन त्रुटि मिलेगी।

आप को इंगित करने के लिए *input माध्यम से पॉइंट को अधिसूचना देना चाहते हैं।

a += input[i];
input++;
i++;

यह भी काम नहीं करेगा आप input पॉइंटर को बढ़ाते हैं, फिर भी [i] आप आगे भी आगे बढ़ते हैं । उदाहरण के लिए, यदि input तीन गुणा वृद्धि हो चुका है, तो input[3] समारोह में पारित मूल सरणी का 7 वां वर्ण होगा, चारवां नहीं यह अंततः अपरिभाषित व्यवहार में परिणाम होता है जब आप सरणी की सीमा को छोड़ देते हैं। अपरिभाषित व्यवहार "बस त्रुटि 10" भी हो सकता है

से बदलो:

a += *input;
input++;
i++;

(असल में, अब i अब किसी भी समय का उपयोग नहीं किया है, आप इसे पूरी तरह से हटा सकते हैं।)

और मुझे इसे दोबारा दोहराएं: char* उपयोग न करें std::string उपयोग करें






const