मैं wstrings के बारे में सीख रहा हूं क्योंकि मैं एक प्रोजेक्ट के लिए UTF-8 को समझना चाहता हूं। मैंने wstrings का उपयोग करके संचालन का परीक्षण करने के लिए एक सरल कार्यक्रम बनाया:

int main()
{
   std::wstring test;
   std::wstring test2;
   std::wstring test3;
   int n;

   getline(std::wcin, test);

   std::wcout << "\n" << test;

   for (n = 0; n < test.size(); n++)
   {
      test[n] += n * n;
      test2[n] = test[n];
   }
   std::wcout << test2 << "\n";

   for (n = 0; n < test2.size(); n++)
   {
    test2[n] -= n * n;
    test3[n] = test[n];
   }
   std::wcout << test3 << "\n";

  return 0;
}

जब मैं इसे निष्पादित करता हूं तो मुझे यह त्रुटि मिलती है: "स्ट्रिंग सबस्क्रिप्ट सीमा से बाहर"

यह मेरी पहली सी ++ "गंभीर" परियोजना है और किसी भी मदद की सराहना की जाती है!

2
Guilherme Galdino 10 सितंबर 2020, 17:59

1 उत्तर

सबसे बढ़िया उत्तर

आपकी test2 स्ट्रिंग खाली है, इसलिए जब आप ऐसा करते हैं:

test2[n] = test[n];

आप एक अमान्य स्थान पर अनुक्रमणित कर रहे हैं, जो अपरिभाषित व्यवहार का आह्वान करता है। इसके परिणामस्वरूप एक अपवाद फेंका जा सकता है।

इसके बजाय, आप कर सकते हैं:

test2.push_back(test[n]);

test3 के साथ भी आपकी यही समस्या है, जिसे आप उसी तरह ठीक कर सकते हैं।


वैकल्पिक रूप से, एक बार जब आप test में पढ़ लेते हैं, तो आप उचित संख्या में तत्वों के साथ test2 और test3 को इनिशियलाइज़ कर सकते हैं:

getline(std::wcin, test);

std::wstring test2(test.size());
std::wstring test3(test.size());

और अब आप बिना किसी समस्या के इन स्ट्रिंग्स में अनुक्रमित कर सकते हैं।


साथ ही, आपकी समस्या के लिए, आपको test2 में कोई अनुक्रमण करने की भी आवश्यकता नहीं है। एक बार जब आप test को संशोधित कर लेते हैं, तो आप इसे बस इस तरह असाइन कर सकते हैं:

for (n = 0; n < test.size(); n++)
{
      test[n] += n * n;
}
std::wstring test2 = test;

और इसी तरह test3 के लिए।

4
cigien 10 सितंबर 2020, 19:07