⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 string.cpp

📁 做为SD0609的一员,我扎实的基础是如何打出来的,来看看我那时连猴子选大王都不会的人,是如何成长起来的吧!主要包括我所做的C++,JAVA基础联系.乱是乱了点,不过如果真心想学习,打好基础,看看也不
💻 CPP
字号:
/*************************************
* 自定义字符串类的实现文件
* 支持文件:string.h
* 达内,陈宗权,2006/8
*************************************/
#include <iostream>
using namespace std;
#include "string.h"
//比较两个字符串的前 n 个字符
int Strncmp( const char* s1, const char* s2, int n )
{
        if( s1==NULL || s2==NULL )
                return 0;
        for( int i=0; i<n; i++ )
        {
                if(*s1!=*s2)
                        return *s1-*s2;
                s1++, s2++;
        }
        return 0;
}
String::String()
{
    str=new char[100];
    len = 100;
    str[0]='\0';//*str=0;
}
String::String(const char* sz)
{
    //sz!=NULL
    len=strlen(sz)+1;
    str=new char[len];
    strcpy( str, sz );
}
String::~String()
{
    if(str){
        delete[] str;
        str=NULL;
        len=0;
    }
}
        //Return 0 -- success, -1 Error
int String::Assign(char *sz)
{
    if(sz==NULL)
        return -1;
    unsigned slen=strlen(sz)+1;
    if( len<slen ){
        delete[] str;
        str=new char[slen];
        //str!=NULL
        len=slen;
    }
    strcpy( str, sz );
    return 0;
}
void String::Disp()
{
    cout<<str<<endl;
}
unsigned int String::Size()
{
    return strlen(str);
}
        //Return 0 -- success, -1 Error
int String::Append(char*app)
{
    if(app==NULL)
        return -1;
    unsigned slen=strlen(str)+strlen(app)+1;
    if( len<slen ){
        char* p=str;
        str = new char[slen];
        if(str==NULL)
            return -1;
        strcpy( str, p );
        delete[] p;
        len = slen;
    }
    strcpy( str+strlen(str), app );
    return 0;
}
/*bool String::Reserve( int nlen )
{
    if( len<nlen ){
        char* p=new char[nlen];
        if( p==NULL )
            return false;
        strcpy( p, str );
        delete[] str;
        str = p;
        len = nlen;
    }
    return true;
}
*/        //Return 0 -- success, -1 Error
int String::Replace(char* from, char* to)
{
    if(from==NULL||to==NULL||*from=='\0')
        return -1;
    unsigned ls=strlen(str);
    unsigned lf=strlen(from);
    unsigned lt=strlen(to);
    unsigned lm=ls*lt/lf;
    if( lm<ls )
        lm=ls;
    char *p=new char[lm+1];
    if(p==NULL)
        return -1;
    int ps=0,pd=0;
    for( int i=0; i<=ls; i++ ){
        if( Strncmp( str+i, from, lf )==0 ){
            strcpy( p+pd, to );
            pd+=lt;
            i+=lf-1;
        }
        else{
            p[pd]=str[i];
            pd++;
        }
    }
    delete[] str;
    str=p;
    len=lm+1;
    return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -