现在的位置: 首页 > 综合 > 正文

字符串操作

2018年08月31日 ⁄ 综合 ⁄ 共 3776字 ⁄ 字号 评论关闭

 //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;
 }

【上篇】
【下篇】

抱歉!评论已关闭.