String Class Problems
Oct 9, 2011 at 9:09pm UTC
Hi, I'm currently working on making a string class and there are a few parts I'm stuck on.
1. I overloaded my >> operator to take in a string of characters from the keyboard but I don't know how to get it to where it reads all the characters until it's done instead of white space. I figured I could use the getline function but I get the error: "no matching function for call to 'getline(std::istream&, char [200])"
2. I'm trying to overload my + operator to add two string of characters together and also add a single character with a string of characters but I'm get the
error: "must take either zero or one argument" for both of the operations.
3. I have to create a function that sees if there is a string of characters in a given object but I can't think of an algorithmic way of doing this. I was able to create a function to find a single character in an object but i can't think of a way to find consecutive characters. Any brief pseudocode would be great.
Any help on these 3 things would be appreciated. Here is my code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268
//Header file
#ifndef STRING_H
#define STRING_H
const int CAPACITY = 200;
class string
{
public :
//CONSTRUCTORS
string();
string(const char []);
string(const char );
//CONST MEMBER FUNCTIONS
char operator [](const int ) const ;
int length() const ;
bool operator ==(const string& rhs) const ;
bool operator !=(const string& rhs) const ;
bool operator < (const string& rhs) const ;
bool operator > (const string& rhs) const ;
bool operator <= (const string& rhs) const ;
bool operator >= (const string& rhs) const ;
string operator +(const string& rhs) const ;
bool findchar(const char & x) const ;
bool findstring(const string& x) const ;
//MEMBER FUNCTIONS
char & operator [](const int );
friend std::ostream& operator << (std::ostream& out, const string& a);
friend std::istream& operator >> (std::istream& in, string& a);
friend string operator +(const string& lhs, const string& rhs);
friend string operator +(const char lhs, const string& rhs);
private :
char str[CAPACITY];
};
#endif /* STRING_H */
//------------------------------------------------------------------------------
//Implementation file
#include <iostream>
#include <cassert>
#include "string.h"
/////////////////////////////CONSTRUCTORS//////////////////////////////////////
string::string()
{
str[0] = '\0' ;
}
//------------------------------------------------------------------------------
string::string(const char a[])
{
int i = 0;
while (a[i] != '\0' )
{
str[i] = a[i];
++i;
}
str[i] = '\0' ;
}
//------------------------------------------------------------------------------
string::string(const char a)
{
str[0] = a;
str[1] = '\0' ;
}
//------------------------------------------------------------------------------
/////////////////////////CONST MEMBER FUNCTIONS/////////////////////////////////
int string::length() const
{
int num = 0;
while (str[num] != '\0' )
++num;
return num;
}
//------------------------------------------------------------------------------
char string::operator [](const int i) const
{
assert((i >= 0) && (i < CAPACITY));
return str[i];
}
//------------------------------------------------------------------------------
bool string::operator ==(const string& rhs) const
{
int i = 0;
while ((str[i]!= '\0' ) && (rhs.str[i] != '\0' ) && (str[i]==rhs.str[i]))
++i;
if ((str[i] == '\0' ) && (rhs.str[i] == '\0' )) return true ;
else return false ;
}
//------------------------------------------------------------------------------
bool string::operator !=(const string& rhs) const
{
return !operator ==(rhs);
}
//-----------------------------------------------------------------------------
bool string::operator <= (const string& rhs) const
{
int i = 0;
while ((str[i] != '\0' ) && (rhs.str[i] != '\0' ))
{
if (str[i] <= rhs.str[i]) return true ;
if (str[i] >= rhs.str[i]) return false ;
++i;
}
if ((str[i] =='\0' ) && (rhs.str[i] != '\0' )) return true ;
else return false ;
}
//------------------------------------------------------------------------------
bool string::operator < (const string& rhs) const
{
int i = 0;
while ((str[i] != '\0' ) && (rhs.str[i] != '\0' ))
{
if (str[i] < rhs.str[i]) return true ;
if (str[i] > rhs.str[i]) return false ;
++i;
}
if ((str[i] =='\0' ) && (rhs.str[i] != '\0' )) return true ;
else return false ;
}
//------------------------------------------------------------------------------
bool string::operator > (const string& rhs) const
{
return !operator <(rhs);
}
//------------------------------------------------------------------------------
bool string::operator >= (const string& rhs) const
{
return !operator <= (rhs);
}
//------------------------------------------------------------------------------
string string::operator +(const string& rhs) const
{
string result;
int i =0;
int size = length();
while (rhs.str[i] != '\0' )
{
result.str[size+i] = rhs.str[i];
++i;
}
return result.str[size + i] = '\0' ;
return result;
}
//------------------------------------------------------------------------------
string string::operator +(const string& lhs, const string& rhs)
//Must either take one or no arguments error
{
return lhs + rhs;
}
//------------------------------------------------------------------------------
string string::operator +(const char lhs, const string& rhs)
//Must either take one or no arguments error
{
return lhs + rhs;
}
//------------------------------------------------------------------------------
bool string::findchar(const char & x) const
{
int i = 0;
while (str[i] != '\0' )
{
if (str[i] != x)
++i;
if (str[i] == x)
return true ;
}
return false ;
}
//------------------------------------------------------------------------------
bool string::findstring(const string& x) const
{
int i = 0;
while (str[i] != '\0' )
{
}
return false ;
}
///////////////////////////MEMBER FUNCTIONS/////////////////////////////////////
std::ostream& operator << (std::ostream& out, const string& a)
{
out << a.str;
return out;
}
//------------------------------------------------------------------------------
std::istream& operator >> (std::istream& in, string& a)
{
in >> a.str; //Works fine but only works until whitespace
getline(in, a.str); //Get no matching function for call to getline error
return in;
}
//------------------------------------------------------------------------------
char & string::operator [](const int i)
{
assert((i >= 0) && (i < CAPACITY));
return str[i];
}
Topic archived. No new replies allowed.