//mystrcmp.cpp
#include <iostream>
#include <string>
#include <cassert>
using namespace std;
int mystrcmp(const char * p1, const char * p2);
int main()
{
char a1[] = "happy new year";
char a2[] = "happy new year";
cout << mystrcmp(a1,a2) << endl;
return 0;
}
int mystrcmp(const char * p1, const char * p2)
{
if( p1 == NULL || p2 == NULL )
{ return -2;}
while( *p1 && *p2)
{
if( *p1 > *p2)
return 1;
if( *p1 < *p2)
return -1;
++p1;
++p2;
}
return 0;
}
///////////////////////////////////////////////////////////////////////////////
mystrcpy.cpp
#include <iostream>
#include <string>
using namespace std;
char * mystrcpy(char * dest, const char * sour);
int main()
{
string str1 = "thinkpad asus lenove";
char str2[100];
mystrcpy(str2,str1.c_str());
cout << str2 << endl;
return 0;
}
char * mystrcpy(char * dest, const char * sour)
{
char * p = dest;
if ( dest == NULL && sour == NULL )
return NULL;
while( *sour )
{
*dest = *sour;
++dest;
++sour;
}
*dest = '/0';
return p;
}
///////////////////////////////////////////////////////////////////////////////
// mystrlen.cpp
#include <iostream>
#include <string>
using namespace std;
int mystrlen(const char * str);
int main()
{
string str1 = "think";
cout << mystrlen( str1.c_str() ) << endl;
return 0;
}
int mystrlen(const char * str)
{
const char *p = str;
while( *p)
{
++p;
}
return p - str;
}
/////////////////////////////////////////////
// mystrncpy.cpp
#include <iostream>
#include <string>
using namespace std;
char * mystrcpy(char * dest, const char * sour,int len);
int main()
{
string str1 = "thinkpad asus lenove";
char str2[100];
mystrcpy(str2,str1.c_str(),8);
cout << str2 << endl;
return 0;
}
char * mystrcpy(char * dest, const char * sour,int len)
{
char * p = dest;
if ( dest == NULL && sour == NULL && len>=0)
return NULL;
while( *sour && len)
{
*dest = *sour;
++dest;
++sour;
--len;
}
*dest = '/0';
return p;
}
/////////////////////////////////////////////////////////////////////
// 查找子串数目.cpp
#include <iostream>
#include <string>
using namespace std;
int fn(const char *s_base, const char * s_sub);
int main()
{
int icount = fn("www.cocacola.com", "co");
cout << icount << endl;
}
int fn(const char *s_base, const char * s_sub)
{
const char * pb = s_base;
int icount=0;
while ( *pb != '/0')
{
const char * ps = s_sub;
if( *pb == *ps)
{
while(*ps == *pb && *ps != '/0')
{
++ps;
++pb;
}
}
else
{
++pb;
}
if( *ps == '/0')
++icount;
}
return icount;
}
////////////////////////////////////////////////////////////////////
// 递归反序输出字符串.cpp
#include <iostream>
using namespace std;
void inverse( const char * p);
int main()
{
inverse( "abcdefg" );
return 0;
}
void inverse( const char * p)
{
if( '/0' == *p)
return;
inverse( p+1 );
cout << *p << endl;
}
//////////////////////////////////////////////////////////////////
String class
#include <iostream>
using namespace std;
class String
{
public:
String(const char * str );
~String();
String & operator = (const String & str);
String(String & str);
const char * c_str() const
{ return _str;}
protected:
char * _str;
};
String::String(const char * str)
{
if( NULL == str )
{
_str = new char('/0');
}
else
{
_str = new char[ strlen(str)+1 ];
strcpy(_str , str);
}
}
String::String(String & str)
{
int len = strlen(str.c_str());
_str = new char[ len +1 ];
strcpy(_str,str.c_str());
}
String & String::operator = (const String & str)
{
delete [] _str;
const char * ptemp = str.c_str();
if( *ptemp == '/0' )
{
_str = new char('/0');
}
else
{
_str = new char[ strlen(ptemp)+1 ];
strcpy(_str, ptemp);
}
return *this;
}
String::~String()
{
delete [] _str;
}
int main()
{
String str1("IBM microsoft");
const char * str2 = str1.c_str() ;
cout << str2 << endl;
String str3("oracle");
str3 = str1;
cout << str3.c_str() << endl;
String str4 = str1;
cout << str4.c_str() << endl;
return 0;
}