#include <iostream>
using namespace std;

class StringEdit {
	char* p;   // pointer to hold characters
	int len;   // length of string

public:
	// Default constructor
	StringEdit() {
		len = 0;
		p = nullptr;
	}
	// Parameterized constructor
	StringEdit(const char* arr, int l) {
		len = l;
		p = new char[len];
		for (int i = 0; i < len; i++) {
			p[i] = arr[i];
		}
	}

    //copy constructor
// 	StringEdit(const StringEdit& newStr) {

// 		len = newStr.len;
// 		p = new char[len];
// 		for (int i = 0; i < len; i++) {
// 			p[i] = newStr.p[i];
// 		}

// 	}

	// Copy assignment operator overload
	StringEdit& operator=(const StringEdit& newStr) {
		if (this != &newStr) {  // avoid self-assignment
			delete[] p;         // free old memory

			len = newStr.len;
			p = new char[len];
			for (int i = 0; i < len; i++) {
				p[i] = newStr.p[i];
			}
		}
		return *this;
	}

	// Display function
	void display()  {
		for (int i = 0; i < len; i++) {
			cout << p[i];
		}
		cout << endl;
	}

	// Destructor
	~StringEdit() {
		delete[] p;
	}
};

int main() {
	StringEdit s;                          // empty string
	StringEdit dummy("abcde", 5);          // parameterized constructor
	s = dummy;                         // uses overloaded operator=

	cout << "Dummy string: ";
	dummy.display();
	cout << "Copied string (s): ";
	s.display();
	//cout << "Copied string (s): ";
	return 0;
}