Dismiss Notice
Join Physics Forums Today!
The friendliest, high quality science and math community on the planet! Everyone who loves science is here!

Add char to string class

  1. Mar 19, 2009 #1
    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 (Text):
    #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: Mar 19, 2009
  2. jcsd
  3. Mar 19, 2009 #2
    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

    ?????
     
  4. Mar 19, 2009 #3

    mgb_phys

    User Avatar
    Science Advisor
    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: Apr 24, 2017
  5. Mar 19, 2009 #4
    I suggest saying string('f')+a.
     
  6. Mar 19, 2009 #5
    yeah, that does work, but i was hoping to be able to just add characters on there own
     
  7. Mar 19, 2009 #6
    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.
     
Know someone interested in this topic? Share this thread via Reddit, Google+, Twitter, or Facebook




Similar Discussions: Add char to string class
  1. The Reverse Of 'char' (Replies: 1)

Loading...