How can I add a character to the end of a string?

  • Thread starter Thread starter pazmush
  • Start date Start date
  • Tags Tags
    Class String
AI Thread Summary
The discussion revolves around implementing a custom string class in C++. The user is attempting to add characters to both the end and the beginning of a string but is encountering challenges, particularly with operator overloading for the '+' operator. They successfully modified their code to append a character but are struggling to prepend a character directly to the string. The conversation highlights the complexity of operator overloading, especially since the '+' operator must be defined for both sides of the operation. It is noted that while adding a character to a string works (e.g., string a("hello"), b; b = a + 'f'), prepending a character (e.g., b = 'f' + a) is not feasible without additional implementation, as the char type lacks member functions. Suggestions include using the string.insert() method for prepending characters and referencing resources on operator overloading for further understanding.
pazmush
Messages
32
Reaction score
0
hi, this is what I've got so far and what I'm wanting to do is add a char to the end(and eventually the beginning) of the string but i can't seem to get it to work, do you think I've got the right idea

Code:
#include "string.h"
#include <iostream>

using namespace std;
using namespace PC3762;
string::string(char* instring)
{
	_N=strlen(instring);

	if (_N > 0) 
	{
		_a = new char [_N+1];

		for (size_t i = 0; i < _N; ++i )
			_a[i] = instring[i];	

		_a[_N] = 0;
	}
}string::string (const string& rca)
{
	_a = NULL;
	_N = rca._N;

	if (_N > 0) 
	{
		_a = new char [_N+1];

		for (size_t i = 0; i < _N; ++i ) 
			_a[i] = rca._a[i];
		_a[_N]=0;
	}
		
}
string string::operator= (const string& rhs) 
{

  if (&rhs == this) return *this;  // Always check this for assignment.
  
  _N = rhs._N;

  delete _a;  // Delete any existing array - OK even if _a == 0.

  if (_N > 0) 
  {
	  _a = new char [_N+1];
	  
	  for (size_t i = 0; i < _N; ++i )
		  _a[i] = rhs._a[i];
	  _a[_N]=0;
  }
	
  return (*this);
}
std::ostream& PC3762::operator<< (std::ostream& os, const string& rca) 
{
	os << "tring" << rca._N << ":";
	for (size_t i = 0; i < rca._N; ++i )
		os << ' ' << rca._a[i];
	return os;
}string::~string() 
{
	delete _a;						// OK even if _a == 0.
}

string string::operator+ (string rhs) 
{

	string temp("hi");

	delete temp._a;
   
	temp._a = _a;

	int l=_N;

   _N = _N+rhs._N;

  if (_N > 0)
  {
	  _a = new char [_N+1];

	  for (size_t i = 0; i < l; ++i )
		  _a[i] = temp._a[i];
	  for (size_t i = 0; i < rhs._N; ++i)
		  _a[l+i] = rhs._a[i]; 
  }

  return *this;

}

string string::operator+ (char rhs) 
{
	string temp("hi");
	delete temp._a;
	temp._a = _a;

	int l = _N;

  if (_N > 0)
  {
	  _a = new char [_N+1];

	  for (size_t i = 0; i < l; ++i )
		  _a[i] = temp._a[i];

	  _a[_N+1] = rhs;
	  
	  
  }

  return *this;

}

thanks
 
Last edited:
Physics news on Phys.org
got the first bit working, had to change _a[_N+1] to _a[_N-1]

has anyone any advice on where to start with adding from the other side

i.e.
at the moment i can add

string a("hello"), b;

b = a+'f';

but i can't do

b = 'f'+a

?
 
You are doing this as an excercise right? You aren't actually planning to invent your own string class.

Operator overloading is a lot more complex than it looks, especialy for '+' when each side can be an object. Take a look at http://www.parashift.com/c++-faq-lite/operator-overloading.html
 
Last edited by a moderator:
I suggest saying string('f')+a.
 
yeah, that does work, but i was hoping to be able to just add characters on there own
 
pazmush said:
yeah, that does work, but i was hoping to be able to just add characters on there own
I suggest reading mgb_phys' link-- if you say "a + b" and one of these is a class, you are actually generally calling a member function on "a" called operator+. "string" has such a member function. "char" does not have any member functions. Therefore you can say (string + char) or (string + string) but you cannot say (char + string).

This aside if you really just want to prepend a character to a string without creating a new string, you can just use the string.insert() function.
 

Similar threads

Back
Top