2 सवाल: मैं वर्तमान में एक पूर्णांक में पूर्णांकों के एक सेट को सहेजने की कोशिश कर रहा हूं, स्ट्रिंग को संख्याओं में फिर से परिभाषित करके, फिर इसे सरणी में संग्रहीत करें

पर बनाया गया सवाल Wed, May 8, 2019 12:00 AM

मैं इनपुट पाठ /संख्याओं (स्ट्रिंग) को बदलने की कोशिश कर रहा हूं, जिसमें कोई भी वर्ण शामिल होगा, लेकिन मैं वर्णों से संख्याओं को अलग करना चाहता हूं और उन्हें एक पूर्णांक सरणी में संग्रहीत करना चाहता हूं, एक बार इसे स्ट्रिंग से परिवर्तित किया जाए। p>

मेरा मानना ​​है कि समस्या वह जगह है जहाँ स्ट्रिंग stoi() के उपयोग से पूर्णांक में परिवर्तित हो रही है, लेकिन मैं समस्या को देख नहीं सकता।

वर्तमान में, कोड किसी भी इनपुट को स्वीकार करता है और इसे एक स्ट्रिंग में बदल देता है, फिर स्ट्रिंग को वर्ण द्वारा वर्ण की जाँच की जाती है, और अल्पविराम या स्थान के साथ अलग किए बिना सभी संख्याओं को एक साथ जोड़ा जाता है, एक बार अल्पविराम या स्थान, या कोई अन्य वर्ण संख्या को अलग करता है, एक पूरे के रूप में संख्या को सरणी में जोड़ा जाता है, और फिर अधिक संख्या के लिए स्ट्रिंग की जांच करना जारी रखता है।

कोई विचार? इनपुट उदाहरण 1: 12, 13, 15     इनपुट उदाहरण २: १२ १३ १५         इनपुट उदाहरण 3: 12ab13cd15ef

पूर्णांक सरणी में परिणाम: 0 [12] 1 [13] 2 [15] इन संख्याओं का उपयोग विशिष्ट क्रम में, सरणी के भीतर संख्याओं का उपयोग करके किया जाएगा।

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

int main()
{
    string datainput, str1, str3;
    cin >> datainput;
    int n = 0, raycount = 0, c;
    int myray[10];
    while (datainput[n])
    {
        if (datainput[n] == ('0') || datainput[n] == ('1') || datainput[n] == ('2') || datainput[n] == ('3') || datainput[n] == ('4') ||
            datainput[n] == ('5') || datainput[n] == ('6') || datainput[n] == ('7') || datainput[n] == ('8') || datainput[n] == ('9'))
        {
            str1 = datainput[n];
            str3 += str1;
        }
        else
        {
            c= stoi(str3);
            c >> myray[raycount];
            raycount++;
        }
        n++;
    }
    cout << myray[0] << endl;
    cout << myray[1] << endl;
    cout << myray[2] << endl;
    cout << myray[3] << endl;
    system("pause");
    return 0;
}
    
0
2 उत्तर                              2                         

मुझे आपके कोड के साथ कुछ समस्याएँ दिखाई दे रही हैं।

  • C ++ 11 से पहले, 06003509911001001350350 में अपरिभाषित व्यवहार एक बार 0600350991100101035062 स्ट्रिंग के अंत तक पहुँच जाता है।

  • जिस तरह से आप संख्यात्मक अंकों की जाँच कर रहे हैं, उसे while (datainput[n]), या 0600350991100101035062 और 0600350991111001001350350 का उपयोग करके एक साधारण श्रेणी की जाँच को सरल बनाया जा सकता है।

  • आप अन्य वर्णों द्वारा अलग किए गए संख्याओं के लिए सही तरीके से लेखांकन नहीं कर रहे हैं, या जब स्ट्रिंग में अंतिम संख्या स्ट्रिंग के बहुत अंत में है।

  • विवरण n के बजाय std::isdigit() में बदलना होगा। और आप अपना लूप नहीं तोड़ रहे हैं यदि 0600350991100101035062 >= की अधिकतम क्षमता तक पहुँच जाता है।

  • आप <= के साथ इसे परिवर्तित करने के बाद एक रिक्त स्ट्रिंग में c >> myray[raycount]; पर रीसेट नहीं कर रहे हैं। आप बस संख्याओं के बीच कोई ब्रेक नहीं होने के साथ पिछले अंकों के अंत में नए अंकों को जोड़ते रहें।

इसके साथ ही, इसके बजाय कुछ इस तरह की कोशिश करें:

myray[raycount] = c;

लाइव डेमो

वैकल्पिक:

raycount

लाइव डेमो

    
0
2019-05-08 21: 43: 34Z
  1. आपके इनपुट के लिए धन्यवाद! मैंने आपके द्वारा सुझाए गए कुछ परिवर्तनों को लागू किया है, और यह सही दिशा में कदम है। इसके अलावा अन्य तरीकों की बहुत सराहना करते हैं जो कोड को आसान बना देगा। स्ट्रिंग्स और पूर्णांक को रीसेट करना स्टैकिंग समस्या को ठीक करने के लिए लग रहा था, लेकिन मैं अभी भी सभी संख्याओं को सरणी में स्टैक्ड होने और स्ट्रिंग को एक नंबर में बदलने पर अटक गया हूं। मैं आपके द्वारा पोस्ट किए गए कोड के माध्यम से ब्राउज़ करूंगा और देखूंगा कि क्या मैं आगे अपनी समस्या को हल कर सकता हूं। : -)
    2019-05-08 20: 06: 06Z
  2. @ डैनियल यह उपयोगी होगा यदि आप अपने प्रश्न को उस वास्तविक इनपुट को दिखाने के लिए संपादित करेंगे जो आप टाइप कर रहे हैं, और अपेक्षित परिणाम कैसा दिखना चाहिए।
    2019-05-08 20: 09: 37Z
  3. मैंने 3 उदाहरण जोड़े हैं, जिनका परिणाम समान होना चाहिए।
    2019-05-08 20: 39: 55Z
  4. @ डैनियल मैंने अपना उत्तर अपडेट किया। मेरे पहले उदाहरण में एक त्रुटि थी, जिसे मैंने ठीक किया है।
    2019-05-08 21: 38: 44Z

    इसलिए, आप संख्याओं और वर्णों को अलग-अलग सरणियों में अलग करना चाहते हैं। यदि ब्लॉक में, आप वर्णों के लिए जाँच कर रहे हैं, तो, मुझे संदेह है कि stoi () काम नहीं करेगा। बेहतर यह एक पूर्णांक के लिए टाइप करें।

    myray[]

    यह वाy आपके अस्थायी सरणी में संख्याएँ होंगी।

        
    - 1
    2019-05-08 16: 34: 59Z
    1. मैं आभारी रहूंगा यदि आप मुझे बताएं कि यह उत्तर क्यों अस्वीकृत है? धन्यवाद।
      2019-05-13 08: 34: 19Z
      str3
स्रोत रखा गया यहाँ