मैंने एक नया चार सरणी बनाने और उसमें वर्ण जोड़ने की कोशिश की। मैं इसे सूचक द्वारा करना चाहता था। मुझे पता है कि पॉइंटर अंकगणित द्वारा पॉइंटर्स को सरणी में स्थानांतरित करना संभव है, इसलिए मैं इसका उपयोग करना चाहता था। हालांकि यह काम नहीं करता है और मुझे नहीं पता कि वास्तव में क्यों। कोई विचार क्यों मैं सरणी में सूचक अंकगणित का उपयोग नहीं कर सकता?

#include <math.h>
#include <iostream>
using namespace std;
void print (char *k){
 
  while(*k!=0)cout<<*k++;

}

int main(){

   int max = 128;
   char* temp1 = new char[max];
   *temp1 = 0;
   char ch;
   while (cin.get(ch)) {
        if (ch=='\n') break;
        *++temp1 = 0;
        *--temp1 = ch;
        temp1++;
      
  }
  
  print(temp1);  

}
c++
0
Sartyro 18 मार्च 2021, 10:37
1
समस्या यह है कि सूचक अंकगणित किया काम करता है। और परिणामस्वरूप, आप स्ट्रिंग को प्रिंट नहीं कर सकते क्योंकि सूचक अब सरणी की शुरुआत की ओर इशारा नहीं करता है। आपको एक पॉइंटर की आवश्यकता होती है जो हमेशा एरे की शुरुआत की ओर इशारा करता है, और दूसरा पॉइंटर ऐरे में कैरेक्टर जोड़ने के लिए।
 – 
user3386109
18 मार्च 2021, 10:46

1 उत्तर

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

यह बहुत उलझा हुआ है

*++temp1 = 0;
*--temp1 = ch;
temp1++;

मुहावरेदार तरीका यह होगा:

*temp1++ = ch;
*temp1 = 0;

लेकिन सबसे महत्वपूर्ण print(temp1); गलत है, क्योंकि temp1 स्ट्रिंग को इंगित नहीं करता है लेकिन यह स्ट्रिंग के अंत को इंगित करता है।

क्या तुम्हे यह चाहिए:

int main() {
  int max = 128;
  char* thestring = new char[max];
  char* temp1 = thestring;
  *temp1 = 0;
  char ch;
  while (cin.get(ch)) {
    if (ch == '\n') break;
    *temp1++ = ch;
    *temp1 =0;
  }

  print(thestring);
}

या इससे भी सरल:

int main() {
  int max = 128;
  char* thestring = new char[max];
  char* temp1 = thestring;
  char ch;
  while (cin.get(ch)) {
    if (ch == '\n') break;
    *temp1++ = ch;
  }

  *temp1 = 0;

  print(thestring);
}
2
Jabberwocky 18 मार्च 2021, 10:49
2
इससे भी आसान, new: char s[128]{}; char* p = s; /*..*/ print(s); को हटा दें।
 – 
Jarod42
18 मार्च 2021, 12:35