| /* Prevent multiple inclusions. */ |
| #ifndef _STRING_CLASS_ |
| #define _STRING_CLASS_ |
| |
| /* Eliminate any prior defintion of string. */ |
| #ifdef string |
| #undef string |
| #endif |
| |
| /* Define the new string type. */ |
| #define string strclass |
| |
| /* Include a few standard header files. */ |
| #include <stdio.h> |
| #include <stdlib.h> |
| #include <string.h> |
| |
| /* |
| * I/O functions. |
| */ |
| |
| #define print(s) printf("%s",(char*)((string)s)) |
| |
| /* |
| * C function defintions. |
| */ |
| #ifdef __cplusplus |
| extern "C" { |
| #endif |
| |
| /* |
| * Safe string utility functions. |
| */ |
| char *new_string(char *src); |
| void del_string(char *str); |
| long string_length(char *s); |
| void copy_string(char *dest, char *src); |
| int compare_strings(char *s1, char *s2); |
| char *add_strings(char *s1, char *s2); |
| char *char_to_string(char ch); |
| char *int_to_string(long i); |
| char *float_to_string(float f); |
| |
| #ifdef __cplusplus |
| } |
| #endif |
| |
| /* |
| * C defintions. |
| */ |
| #ifndef __cplusplus |
| |
| typedef char *string; |
| |
| /* |
| * C++ defintions. |
| */ |
| #else |
| |
| /* |
| * String class. |
| */ |
| class string |
| { |
| protected: |
| char *str; /* the string itself */ |
| |
| public: |
| string(void) {str=new_string(NULL);} |
| string(char *s) {str=new_string(s);} |
| string(string& s) {str=new_string(s.str);} |
| string(char ch) {str=new_string(char_to_string(ch));} |
| string(int i) {str=new_string(int_to_string(i));} |
| string(long i) {str=new_string(int_to_string(i));} |
| string(float f) {str=new_string(float_to_string(f));} |
| ~string(void) {del_string(str);} |
| |
| char& operator [] (unsigned i) {return str[i];} |
| operator char* (void) {return str;} |
| |
| string& operator = (string s2) |
| {if (str != s2.str) {del_string(str); str=new_string(s2.str);} return *this;} |
| }; |
| |
| inline string operator + (string s1, string s2) |
| {return add_strings(s1,s2);} |
| inline string operator + (string s1, char *s2) |
| {return add_strings(s1,s2);} |
| inline string operator + (char *s1, string s2) |
| {return add_strings(s1,s2);} |
| |
| inline string operator + (string s1, char ch) |
| {return add_strings(s1,char_to_string(ch));} |
| inline string operator + (char ch, string s2) |
| {return add_strings(char_to_string(ch),s2);} |
| inline string operator + (string s1, int i) |
| {return add_strings(s1,int_to_string(i));} |
| inline string operator + (int i, string s2) |
| {return add_strings(int_to_string(i),s2);} |
| inline string operator + (string s1, long i) |
| {return add_strings(s1,int_to_string(i));} |
| inline string operator + (long i, string s2) |
| {return add_strings(int_to_string(i),s2);} |
| inline string operator + (string s1, float f) |
| {return add_strings(s1,float_to_string(f));} |
| inline string operator + (float f, string s2) |
| {return add_strings(float_to_string(f),s2);} |
| |
| inline int operator == (string s1, string s2) |
| {return (compare_strings(s1,s2) == 0);} |
| inline int operator == (string s1, char *s2) |
| {return (compare_strings(s1,s2) == 0);} |
| inline int operator == (char *s1, string s2) |
| {return (compare_strings(s1,s2) == 0);} |
| inline int operator == (string s1, char ch) |
| {return (compare_strings(s1,char_to_string(ch)) == 0);} |
| inline int operator == (char ch, string s2) |
| {return (compare_strings(char_to_string(ch),s2) == 0);} |
| inline int operator == (string s1, int ch) |
| {return (compare_strings(s1,char_to_string(ch)) == 0);} |
| inline int operator == (int ch, string s2) |
| {return (compare_strings(char_to_string(ch),s2) == 0);} |
| |
| inline int operator != (string s1, string s2) |
| {return compare_strings(s1,s2);} |
| inline int operator != (string s1, char *s2) |
| {return compare_strings(s1,s2);} |
| inline int operator != (char *s1, string s2) |
| {return compare_strings(s1,s2);} |
| inline int operator != (string s1, char ch) |
| {return compare_strings(s1,char_to_string(ch));} |
| inline int operator != (char ch, string s2) |
| {return compare_strings(char_to_string(ch),s2);} |
| inline int operator != (string s1, int ch) |
| {return compare_strings(s1,char_to_string(ch));} |
| inline int operator != (int ch, string s2) |
| {return compare_strings(char_to_string(ch),s2);} |
| |
| /* |
| * End of C++ defintions. |
| */ |
| #endif |
| |
| /* |
| * End of string class definition. |
| */ |
| #endif |