#include <stdio.h>
#include <string.h>
//
// String class with overloaded cat function
//
class String
{
public:
String() { ... }
String(const char *s) { ... }
String(const String &s) { ... }
~String() { delete str; }
size_t length() { return len; }
const char *text() { return str; }
void cat(char c);
void cat(const char *s);
void cat(const String &s);
char &sub(size_t i) { ... }
private:
size_t len;
char *str;
};
//
// append a character to a String
//
void String::cat(char c)
{
char *p = strcpy(new char[len + 2], str);
p[len++] = c;
p[len] = '\0';
delete str;
str = p;
}
//
// append a nul-terminated string to a String
//
void String::cat(const char *s)
{
size_t n = len + strlen(s) + 1;
char *p = strcpy(new char[n], str);
strcat(p, s);
delete str;
str = p;
}
//
// append a String to a String
//
void String::cat(const String &s)
{
size_t n = len + s.len + 1;
char *p - strcpy(new char[n], str);
strcat(p, s.str);
delete str;
str= p;
}
int main()
{
size_t i;
String s1("hello"); // s1 = "hello"
String s2(s1); // s2 = "hello"
s2.cat(','}; // s2 = "hello,"
s2.cat(' '); // s2 = "hello,"
s2.cat(s2); // s2 = "hello, hello, "
s2.cat("world"); // s2 = "hello, hello, world"
printf("s1 = %s\n", s1.text());
printf("s2 = %s\n", s2.text());
return 0;
}
// End of File