pazmush

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:
Related MATLAB, Maple, Mathematica, LaTeX, Etc News on Phys.org

pazmush

got the first bit working, had to change _a[_N+1] to _a[_N-1]

i.e.
at the moment i can add

string a("hello"), b;

b = a+'f';

but i cant do

b = 'f'+a

?????

mgb_phys

Homework Helper
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:

Coin

I suggest saying string('f')+a.

pazmush

yeah, that does work, but i was hoping to be able to just add characters on there own

Coin

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.

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