📄 cpstring.cpp
字号:
// cpstring.cc - String class method definitions // Copyright 1998-2010 Wind River Systems, Inc. // // modification history // -------------------- // 02a,30mar98,pai added Wind River coding conventions // 01a,10jan98,pai written // // // DESCRIPTION // This module provides method definitions for a String class. // // INCLUDE FILES: cpstring.h // // includes #include "cpstring.h" //////////////////////////////////////////////////////////////////////////////// // Private methods //////////////////////////////////////////////////////////////////////////////// // // String::strcpy - copy one string to another string // // This routine provides exactly the same functionality as strcpy() from // the ANSI standard C library. The string pointed to by source is copied // to the storage pointed to by target, including a terminating NUL character. // // RETURNS: The address of the target string. // char * String::strcpy (char * target, const char * source) const { char * sbase = target; while ( *target++ = *source++ ) ; // do nothing return (sbase); } //////////////////////////////////////////////////////////////////////////////// // // String::strlen - determine the length of a string // // This routine provides exactly that same functionality as strlen() from // the ANSI standard C library. The argument, str, should point to a NUL // terminated string. This routine will return the number of characters // in the string pointed to by str, up to, and not including, the NUL // character. // // RETURNS: The number of characters, not including NUL, in the string // pointed to by str. // unsigned String::strlen (const char * str) const { unsigned ssize = 0; while ( *str++ ) ++ssize; return (ssize); } //////////////////////////////////////////////////////////////////////////////// // // String::strcmp - compare two strings // // This routine provides exactly the same functionality as strcmp() in the // ANSI standard C library. Both arguments should point to NUL terminated // strings. The strings are compared, character by character. // // RETURNS: // < 0 if the string, s, is before, t, in the machine sort order. // 0 if s == t in the machine sort order. // > 0 if the string, s, is after, t, in the machine sort order. // int String::strcmp (const char * s, const char * t) const { while ( *s++ == *t++ ) if ( *(s - 1) == '\0') break; return ( *(--s) - *(--t) ); } //////////////////////////////////////////////////////////////////////////////// // Public methods //////////////////////////////////////////////////////////////////////////////// // // String::String - construct a String from a C-string // // This constructor constructs a String object from a NUL terminated C-string. // // RETURNS: N/A // String::String (const char * s) { len = strlen (s); str = new char[len + 1]; strcpy (str, s); } //////////////////////////////////////////////////////////////////////////////// // // String::String - default constructor // // The default constructor for String will construct a String object which // is initially empty. // // RETURNS: N/A // String::String () { len = 0; str = new char[1]; str[0] = '\0'; } //////////////////////////////////////////////////////////////////////////////// // // String::String - copy constructor // // The copy constructor for String will construct a String object from // another String object. // // RETURNS: N/A // String::String (const String & st) { len = st.len; str = new char[len + 1]; strcpy (str, st.str); } //////////////////////////////////////////////////////////////////////////////// // // String::~String - String destructor // // The string destructor, when invoked, will delete memory allocated for // strings. // // RETURNS: N/A // String::~String () { delete [] str; } //////////////////////////////////////////////////////////////////////////////// // // String::operator= - assign a String to a String // // This assignment operator will assign one String object to another String // object. // // RETURNS: A reference to the invoking object ( *this ). // String & String::operator=(const String & st) { if ( this == &st ) { return *this; } delete [] str; len = st.len; str = new char[len + 1]; strcpy (str, st.str); return *this; } //////////////////////////////////////////////////////////////////////////////// // // String::operator= - assign a C string to a String object // // This assignment operator will assign a C string to a String object. // // RETURNS: A reference to the invoking object ( *this ). // String & String::operator=(const char * s) { delete [] str; len = strlen (s); str = new char[len + 1]; strcpy (str, s); return *this; } //////////////////////////////////////////////////////////////////////////////// // // String::operator+= - append a String to a String // // This operator will append a String object to a String object. Given two // String objects: // // String obj1 = "Hello, "; // String obj2 = "World!"; // // obj1 += obj2; // // will result in the string, "Hello, World!", being stored in obj1. // // RETURNS: A reference to the invoking object. // String & String::operator+=(const String & st) { char * tempString = new char[len + st.len + 1]; strcpy (tempString, str); strcpy ((tempString + len), st.str); // get rid of the old string delete [] str; len = strlen (tempString); str = new char[len + 1]; // copy the temp string to this string, and get rid of the temp string strcpy (str, tempString); delete [] tempString; return *this; } //////////////////////////////////////////////////////////////////////////////// // // String::operator+= - append a C string to a String // // This operator will append a C strintg to a String object. Given a C string // and a String object: // // String obj1 = "Hello, "; // char * obj2 = "World!"; // // obj1 += obj2; // // will result in the string, "Hello, World!", being stored in obj1. // // RETURNS: A reference to the invoking object. // String & String::operator+=(const char * s) { char * tempString = new char[len + strlen(s) + 1]; strcpy (tempString, str); strcpy ((tempString + len), s); // get rid of the old string delete [] str; len = strlen (tempString); str = new char[len + 1]; // copy the temp string to this string, and get rid of the temp string strcpy (str, tempString); delete [] tempString; return *this; } //////////////////////////////////////////////////////////////////////////////// // Friends //////////////////////////////////////////////////////////////////////////////// // // operator> - compare two String objects // // This operator, a friend method, compares two String objects. // // RETURNS: // True, if st1 is greater than (follows) st2 in the machine sort order. // False, if st1 is not greater than st2 in the machine sort order. // Bool operator>(const String & st1, const String & st2) { if ( strcmp (st1.str, st2.str) > 0 ) { return True; } else { return False; } } //////////////////////////////////////////////////////////////////////////////// // // operator< - compare two String objects // // This operator, a friend method, compares two String objects. // // RETURNS: // True, if st1 is less than (precedes) st2 in the machine sort order. // False, if st1 is not less than st2 in the machine sort order. // Bool operator<(const String & st1, const String & st2) { if ( strcmp (st1.str, st2.str) < 0 ) { return True; } else { return False; } } //////////////////////////////////////////////////////////////////////////////// // // operator== - compare two String objects // // This operator, a friend method, compares two String objects. // // RETURNS: // True, if st1 and st2 are identicle in the machine sort order. // False, if st1 and st2 are not identicle in the machine sort order. // Bool operator==(const String & st1, const String & st2) { if ( strcmp (st1.str, st2.str) == 0 ) { return True; } else { return False; } } //////////////////////////////////////////////////////////////////////////////// // // operator<< - write a String object to the standard ostream object // // This operator, a friend method, inserts a String into an ostream object. // // RETURNS: A reference to an ostream object. // ostream & operator<<(ostream & os, const String & st) { os << st.str; return os; } //////////////////////////////////////////////////////////////////////////////// // // operator>> - read a String object from the standard istream object // // This operator, a friend method, extracts a String from an istream object. // This overloaded extraction operator for the String class is somewhat // limited; it will only read up to 80 characters from the standard input // stream. // // RETURNS: A reference to an istream object. // istream & operator>>(istream & is, String & st) { char temp[80]; if ( is.getline (temp, 80) && temp[0] != '\0' ) st = temp; // If user entered nothing, may have to reset the // failbit if compiler impliments draft standard if ( cin.fail () ) cin.clear (); return is; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -