Message-ID: <000b01c06d64$fce076e0$8cb13cd8@mainsystem> From: cody1 AT ktsnet DOT com (cody1) To: Subject: please help me Date: Sat, 23 Dec 2000 22:49:55 -0600 MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_NextPart_000_0007_01C06D32.AB6E5160" X-Priority: 3 X-MSMail-Priority: Normal X-Mailer: Microsoft Outlook Express 5.50.4133.2400 X-MimeOLE: Produced By Microsoft MimeOLE V5.50.4133.2400 Reply-To: djgpp AT delorie DOT com This is a multi-part message in MIME format. ------=_NextPart_000_0007_01C06D32.AB6E5160 Content-Type: multipart/alternative; boundary="----=_NextPart_001_0008_01C06D32.AB6E5160" ------=_NextPart_001_0008_01C06D32.AB6E5160 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable I recently downloaded your wonderful c++ compiler and I absolutely love = it. I have one important question though that I really need help with. = I have some header and cpp files from school that allow me to use = apstrings, apvectors, and apmatrices, which are just easier ways to = manipulate strings, arrays, and multi-dimensional arrays. However, = whenever I tried using these with your compiler, I got the following = error: this one is what happened when I tried to compile apvector.cpp from the = command line: " In file included from apvector.cpp:17: c:/djgpp/lang/cxx/apvector.h:127: apvector.cpp: No such file or = directory (ENOENT)" I tried using apvector.h without recompiling it, but to no avail. = Besides your compiler, I use Borland c++ 3.0, and it works perfectly in = it with absolutely no errors at all, but when I try to use it with = djgpp, it's completely filled with errors everywhere. Please help me, = as I look forward to using your great compiler (and the world of 32-bit = applications), but I can't do without these libraries. I have included = the apstring.h and apstring.cpp files to allow you to see for yourself = (if you have time) what's wrong with them. Thank you for your time and = consideration. = Sincerely, = Cody May ------=_NextPart_001_0008_01C06D32.AB6E5160 Content-Type: text/html; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable
I recently downloaded your wonderful = c++ compiler=20 and I absolutely love it.  I have one important question though = that I=20 really need help with.  I have some header and cpp files from = school that=20 allow me to use apstrings, apvectors, and apmatrices, which are just = easier ways=20 to manipulate strings, arrays, and multi-dimensional arrays.  = However,=20 whenever I tried using these with your compiler, I got the following=20 error:
this one is what happened when I tried = to compile=20 apvector.cpp from the command line:
 
" In file included from apvector.cpp:17:
c:/djgpp/lang/cxx/apvector.h:127: apvector.cpp: No such file or = directory=20 (ENOENT)"
 
I tried using apvector.h without = recompiling it,=20 but to no avail.  Besides your compiler, I use Borland c++ 3.0, and = it=20 works perfectly in it with absolutely no errors at all, but when I try = to use it=20 with djgpp, it's completely filled with errors everywhere.  Please = help me,=20 as I look forward to using your great compiler (and the world of 32-bit=20 applications), but I can't do without these libraries.  I have = included the=20 apstring.h and apstring.cpp files to allow you to see for yourself (if = you have=20 time) what's wrong with them.  Thank you for your time and=20 consideration.
 
       =20             =    =20             =    =20             =    =20             =    =20             =    =20 Sincerely,
       =20             =    =20             =    =20             =    =20             =    =20             =     Cody=20 May
------=_NextPart_001_0008_01C06D32.AB6E5160-- ------=_NextPart_000_0007_01C06D32.AB6E5160 Content-Type: application/octet-stream; name="APSTRING.H" Content-Transfer-Encoding: quoted-printable Content-Disposition: attachment; filename="APSTRING.H" #ifndef _APSTRING_H #define _APSTRING_H #include #include "BOOL.H" // ******************************************************************* // APCS string class // // string class consistent with a subset of the standard C++ string = class // as defined in the draft ANSI standard // ******************************************************************* extern const int npos; // used to indicate not a position in the string class apstring { public: // constructors/destructor apstring( ); // construct empty string "" apstring( const char * s ); // construct from string = literal apstring( const apstring & str ); // copy constructor ~apstring( ); // destructor // assignment const apstring & operator =3D ( const apstring & str ); // assign = str const apstring & operator =3D ( const char * s ); // assign s const apstring & operator =3D ( char ch ); // assign ch // accessors int length( ) const; // number of chars int find( const apstring & str ) const; // index of first = occurrence of str int find( char ch ) const; // index of first = occurrence of ch apstring substr( int pos, int len ) const; // substring of len = chars // starting at pos const char * c_str( ) const; // explicit conversion = to char * // indexing char operator[ ]( int k ) const; // range-checked = indexing char & operator[ ]( int k ); // range-checked = indexing // modifiers const apstring & operator +=3D ( const apstring & str );// append = str const apstring & operator +=3D ( char ch ); // append = char private: int myLength; // length of string (# of = characters) int myCapacity; // capacity of string char * myCstring; // storage for characters }; // The following free (non-member) functions operate on strings // // I/O functions ostream & operator << ( ostream & os, const apstring & str ); istream & operator >> ( istream & is, apstring & str ); istream & getline( istream & is, apstring & str ); // comparison operators: bool operator =3D=3D ( const apstring & lhs, const apstring & rhs ); bool operator !=3D ( const apstring & lhs, const apstring & rhs ); bool operator < ( const apstring & lhs, const apstring & rhs ); bool operator <=3D ( const apstring & lhs, const apstring & rhs ); bool operator > ( const apstring & lhs, const apstring & rhs ); bool operator >=3D ( const apstring & lhs, const apstring & rhs ); // concatenation operator + apstring operator + ( const apstring & lhs, const apstring & rhs ); apstring operator + ( char ch, const apstring & str ); apstring operator + ( const apstring & str, char ch ); // ******************************************************************* // Specifications for string functions // // Any violation of a function's precondition will result in an error // message followed by a call to abort. // // constructors / destructor // // string( ) // postcondition: string is empty // // string( const char * s ) // description: constructs a string object from a literal string // such as "abcd" // precondition: s is '\0'-terminated string as used in C // postcondition: copy of s has been constructed // // string( const string & str ) // description: copy constructor // postcondition: copy of str has been constructed // // ~string( ); // description: destructor // postcondition: string is destroyed // // assignment // // string & operator =3D ( const string & rhs ) // postcondition: normal assignment via copying has been performed // // string & operator =3D ( const char * s ) // description: assignment from literal string such as "abcd" // precondition: s is '\0'-terminated string as used in C // postcondition: assignment via copying of s has been performed // // string & operator =3D ( char ch ) // description: assignment from character as though single char = string // postcondition: assignment of one-character string has been = performed // // accessors // // int length( ) const; // postcondition: returns # of chars in string // // int find( const string & str) const; // description: find the first occurrence of the string str within = this // string and return the index of the first character. = If // str does not occur in this string, then return = npos. // precondition: this string represents c0, c1, ..., c(n-1) // str represents s0, s1, ...,s(m-1) // postcondition: if s0 =3D=3D ck0, s1 =3D=3D ck1, ..., s(m-1) =3D=3D = ck(m-1) and // there is no j < k0 such that s0 =3D cj, ...., sm = =3D=3D c(j+m-1), // then returns k0; // otherwise returns npos // // int find( char ch ) const; // description: finds the first occurrence of the character ch = within this // string and returns the index. If ch does not occur = in this // string, then returns npos. // precondition: this string represents c0, c1, ..., c(n-1) // postcondition: if ch =3D=3D ck, and there is no j < k such that ch = =3D=3D cj // then returns k; // otherwise returns npos // // string substr( int pos, int len ) const; // description: extract and return the substring of length len = starting // at index pos // precondition: this string represents c0, c1, ..., c(n-1) // 0 <=3D pos <=3D pos + len - 1 < n. // postcondition: returns the string that represents // c(pos), c(pos+1), ..., c(pos+len-1) // // const char * c_str( ) const; // description: convert string into a '\0'-terminated string as // used in C for use with functions // that have '\0'-terminated string parameters. // postcondition: returns the equivalent '\0'-terminated string // // indexing // // char operator [ ]( int k ) const; // precondition: 0 <=3D k < length() // postcondition: returns copy of the kth character // // char & operator [ ]( int k ) // precondition: 0 <=3D k < length() // postcondition: returns reference to the kth character // // modifiers // // const string & operator +=3D ( const string & str ) // postcondition: concatenates a copy of str onto this string // // const string & operator +=3D ( char ch ) // postcondition: concatenates a copy of ch onto this string // // // non-member functions // // ostream & operator << ( ostream & os, const string & str) // postcondition: str is written to output stream os // // istream & operator >> ( istream & is, string & str ) // precondition: input stream is open for reading // postcondition: the next string from input stream is has been read // and stored in str // // istream & getline( istream & is, string & str ) // description: reads a line from input stream is into the string = str // precondition: input stream is open for reading // postcondition: chars from input stream is up to '\n' have been = read // and stored in str; the '\n' has been read but not = stored // // string operator + ( const string & lhs, const string & rhs ) // postcondition: returns concatenation of lhs with rhs // // string operator + ( char ch, const string & str ) // postcondition: returns concatenation of ch with str // // string operator + ( const string & str, char ch ) // postcondition: returns concatenation of str with ch // //*************************************************************** #include "apstring.cpp" #endif ------=_NextPart_000_0007_01C06D32.AB6E5160 Content-Type: application/octet-stream; name="APSTRING.CPP" Content-Transfer-Encoding: quoted-printable Content-Disposition: attachment; filename="APSTRING.CPP" // ******************************************************************* // Last Revised: January 13, 1998, <=3D and >=3D redefined using ! and = < // operator +=3D now takes constant // amortized time for adding one char // // APCS string class IMPLEMENTATION // // see apstring.h for complete documentation of functions // // string class consistent with a subset of the standard C++ string = class // as defined in the draft ANSI standard // ******************************************************************* #include #include #include "apstring.h" const int npos =3D -1; const int MAX_LENGTH =3D 1024; // largest size string for input apstring::apstring() // postcondition: string is empty { myLength =3D 0; myCapacity =3D 1; myCstring =3D new char[myCapacity]; myCstring[0] =3D '\0'; // make c-style string zero length } apstring::apstring(const char * s) //description: constructs a string object from a literal string // such as "abcd" //precondition: s is '\0'-terminated string as used in C //postcondition: copy of s has been constructed { assert (s !=3D 0); // C-string not NULL? myLength =3D strlen(s); myCapacity =3D myLength + 1; // make room for '\0' myCstring =3D new char[myCapacity]; strcpy(myCstring,s); } apstring::apstring(const apstring & str) //description: copy constructor //postcondition: copy of str has been constructed { myLength =3D str.length(); myCapacity =3D myLength + 1; myCstring =3D new char[myCapacity]; strcpy(myCstring,str.myCstring); } apstring::~apstring() //description: destructor //postcondition: string is destroyed { delete[] myCstring; // free memory } const apstring& apstring::operator =3D(const apstring & rhs) //postcondition: normal assignment via copying has been performed { if (this !=3D &rhs) // check aliasing { if (myCapacity < rhs.length() + 1) // more memory needed? { delete[] myCstring; // delete old string myCapacity =3D rhs.length() + 1; // add 1 for '\0' myCstring =3D new char[myCapacity]; } myLength =3D rhs.length(); strcpy(myCstring,rhs.myCstring); } return *this; } const apstring& apstring::operator =3D (const char * s) //description: assignment from literal string such as "abcd" //precondition: s is '\0'-terminated string as used in C //postcondition: assignment via copying of s has been performed { int len =3D 0; // length of newly = constructed string assert(s !=3D 0); // make sure s non-NULL len =3D strlen(s); // # of characters in string // free old string if necessary if (myCapacity < len + 1) { delete[] myCstring; // delete old string myCapacity =3D len + 1; // add 1 for '\0' myCstring =3D new char[myCapacity]; } myLength =3D len; strcpy(myCstring,s); return *this; } const apstring& apstring::operator =3D (char ch) //description: assignment from character as though single char string //postcondition: assignment of one-character string has been performed { if (myCapacity < 2) { delete [] myCstring; myCapacity =3D 2; myCstring =3D new char[myCapacity]; } myLength =3D 1; myCstring[0] =3D ch; // make string one character long myCstring[1] =3D '\0'; return *this; } int apstring::length( ) const //postcondition: returns # of chars in string { return myLength; } const char * apstring::c_str() const //description: convert string into a '\0'-terminated string as // used in C for use with functions // that have '\0'-terminated string parameters. //postcondition: returns the equivalent '\0'-terminated string { return myCstring; } char& apstring::operator[](int k) // precondition: 0 <=3D k < length() // postcondition: returns copy of the kth character // note: if this reference is used to write a '\0' // subsequent results are undefined { if (k < 0 || myLength <=3D k) { cerr << "index out of range: " << k << " string: " << myCstring << endl; assert(0 <=3D k && k < myLength); } return myCstring[k]; } char apstring::operator[](int k) const // precondition: 0 <=3D k < length() // postcondition: returns copy of the kth character { if (k < 0 || myLength <=3D k) { cerr << "index out of range: " << k << " string: " << myCstring << endl; assert(0 <=3D k && k < myLength); } return myCstring[k]; } ostream& operator <<(ostream & os, const apstring & str) //postcondition: str is written to output stream os { return os << str.c_str(); } istream& operator >>(istream & is, apstring & str) //precondition: input stream is open for reading //postcondition: the next string from input stream is has been read // and stored in str { char buf[MAX_LENGTH]; is >> buf; str =3D buf; return is; } istream & getline(istream & is, apstring & str) //description: reads a line from input stream is into the string str //precondition: input stream is open for reading //postcondition: chars from input stream is up to '\n' have been read { char buf[MAX_LENGTH]; is.getline(buf,MAX_LENGTH); str =3D buf; return is; } const apstring& apstring::operator +=3D(const apstring & str) //postcondition: concatenates a copy of str onto this string { apstring copystring(str); // copy to avoid aliasing problems int newLength =3D length() + str.length(); // self + added string int lastLocation =3D length(); // index of '\0' // check to see if local buffer not big enough if (newLength >=3D myCapacity) { myCapacity =3D newLength + 1; if (str.length() =3D=3D 1) // special case for catenating one char { // make room for future catenations myCapacity *=3D 2; } char * newBuffer =3D new char[myCapacity]; strcpy(newBuffer,myCstring); // copy into new buffer delete [] myCstring; // delete old string myCstring =3D newBuffer; } // now catenate str (copystring) to end of myCstring strcpy(myCstring+lastLocation,copystring.c_str() ); myLength =3D newLength; // update information return *this; } const apstring & apstring::operator +=3D ( char ch ) // postcondition: concatenates a copy of ch onto this string { apstring temp; // make string equivalent of ch temp =3D ch; *this +=3D temp; return *this; } apstring operator +(const apstring & lhs, const apstring & rhs) // postcondition: returns concatenation of lhs with rhs { apstring result(lhs); // copies lhs to result result +=3D rhs; // catenate rhs return result; // returns a copy of result } apstring operator + ( char ch, const apstring & str ) // postcondition: returns concatenation of ch with str { apstring result; // make string equivalent of ch result =3D ch; result +=3D str; return result; } apstring operator + ( const apstring & str, char ch ) // postcondition: returns concatenation of str with ch { apstring result(str); result +=3D ch; return result; } apstring apstring::substr(int pos, int len) const //description: extract and return the substring of length len starting // at index pos //precondition: this string represents c0, c1, ..., c(n-1) // 0 <=3D pos <=3D pos + len - 1 < n. //postcondition: returns the string that represents // c(pos), c(pos+1), ..., c(pos+len-1) // { if (pos < 0) // start at front when pos < 0 { pos =3D 0; } if (pos >=3D myLength) return ""; // empty string int lastIndex =3D pos + len - 1; // last char's index (to copy) if (lastIndex >=3D myLength) // off end of string? { lastIndex =3D myLength-1; } apstring result(*this); // make sure enough space = allocated int j,k; for(j=3D0,k=3Dpos; k <=3D lastIndex; j++,k++) { result.myCstring[j] =3D myCstring[k]; } result.myCstring[j] =3D '\0'; // properly terminate C-string result.myLength =3D j; // record length properly return result; } int apstring::find(const apstring & str) const //description: find the first occurrence of the string str within this // string and return the index of the first character. If // str does not occur in this string, then return npos. //precondition: this string represents c0, c1, ..., c(n-1) // str represents s0, s1, ...,s(m-1) //postcondition: if s0 =3D=3D ck0, s1 =3D=3D ck1, ..., s(m-1) =3D=3D = ck(m-1) and // there is no j < k0 such that s0 =3D cj, ...., sm =3D=3D = c(j+m-1), // then returns k0; // otherwise returns npos { int len =3D str.length(); int lastIndex =3D length() - len; int k; for(k=3D0; k <=3D lastIndex; k++) { if (strncmp(myCstring + k,str.c_str(),len) =3D=3D 0) return k; } return npos; } int apstring::find( char ch ) const // description: finds the first occurrence of the character ch within = this // string and returns the index. If ch does not occur in = this // string, then returns npos. // precondition: this string represents c0, c1, ..., c(n-1) // postcondition: if ch =3D=3D ck, and there is no j < k such that ch = =3D=3D cj // then returns k; // otherwise returns npos { int k; for(k=3D0; k < myLength; k++) { if (myCstring[k] =3D=3D ch) { return k; } } return npos; } bool operator =3D=3D ( const apstring & lhs, const apstring & rhs ) { return strcmp(lhs.c_str(), rhs.c_str()) =3D=3D 0; } bool operator !=3D ( const apstring & lhs, const apstring & rhs ) { return ! (lhs =3D=3D rhs); } bool operator < ( const apstring & lhs, const apstring & rhs ) { return strcmp(lhs.c_str(), rhs.c_str()) < 0; } bool operator <=3D ( const apstring & lhs, const apstring & rhs ) { return !( rhs < lhs ); } bool operator > ( const apstring & lhs, const apstring & rhs ) { return rhs < lhs; } bool operator >=3D ( const apstring & lhs, const apstring & rhs ) { return ! ( lhs < rhs ); } ------=_NextPart_000_0007_01C06D32.AB6E5160--