📄 string.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 + -