Add char to string class

  • Thread starter pazmush
  • Start date
hi, this is what ive 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 ive 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:
got the first bit working, had to change _a[_N+1] to _a[_N-1]

has any one 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 cant do

b = 'f'+a

?????
 

mgb_phys

Science Advisor
Homework Helper
7,744
11
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:
558
1
I suggest saying string('f')+a.
 
yeah, that does work, but i was hoping to be able to just add characters on there own
 
558
1
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.
 

Related Threads for: Add char to string class

Replies
23
Views
9K
Replies
1
Views
3K
Replies
3
Views
4K

Physics Forums Values

We Value Quality
• Topics based on mainstream science
• Proper English grammar and spelling
We Value Civility
• Positive and compassionate attitudes
• Patience while debating
We Value Productivity
• Disciplined to remain on-topic
• Recognition of own weaknesses
• Solo and co-op problem solving
Top