1、/list#include#include#include#include#includeusing namespace std;class i_stringprivate:char *str;int len;public: /构造函数i_string();i_string();i_string(i_string i_string(char *);i_string(char );i_string(int );i_string(char *,int );i_string(char ,int );i_string(i_stringpublic: /位数控制输出void Sci_out(int );
2、void Sci_outln(int );void Sci_out();void Sci_outln();public: /功能函数int length() return len;char* begin() return char* end() return char* Str() return str;void insert(int ,char *);void insert(int ,char);void insert(int ,i_string void reserve();void reserve(int,int);void swap(int ,int);void remove(char
3、);void remove(int,int,char);void remove(char*);void remove(int ,int, char*);void remove(int );void remove(int,int);void erase(char*);void erase(int );i_string substring(int,int);i_string substring(int);_int64 valueof();_int64 valueof(int,int);void reset();friend void swap(char*,char*);friend void sw
4、ap(charfriend void Reset(char*);friend void Reserve(char*);friend void get_next(char*,int*);friend _int64 valueof(i_string friend _int64 valueof(char *);friend int valueof(char );bool empty();bool Figure();void clear();public: /值运算函数i_string add(i_string i_string add(char *);i_string add(char );i_st
5、ring add(int );i_string add(_int64);i_string mul(i_string i_string mul(char *);i_string mul(char );i_string mul(int );i_string mul(_int64 );i_string sub(i_string i_string sub(char *);i_string sub(char );i_string sub(int );i_string sub(_int64 );public: /运算符重载i_string i_string i_string bool operator (
6、i_string bool operator = (i_string bool operator = (i_string bool operator != (i_string void operator += (i_string void operator += (char *);void operator += (char );i_string operator * (int );i_string operator (int);i_string operator + (i_string i_string operator + (char *);i_string operator + (cha
7、r );i_string operator (int );public: /特殊运算符friend istream ch.len=strlen(ch.str);return is;friend ostream if(k1+op) coutSci_out(w);coutSci_out(1);void i_string:Sci_outln()this-Sci_out(1);cout0)if(c%2) SUM=SUM.mul(A);A=A.mul(A);c/=2;return SUM;i_string i_string:operator + (char ch)char *c=new char2;c0
8、=ch;c1=NULL;return *this+c;i_string i_string:operator(int n)if(lenFigure()i_str1=i_str1.sub(i_str2);if(i_str10=-) return true;return false;if(strcmp(str,ch.str) (i_string i_str1=i_str2.sub(i_str1);if(i_str10=-) return true;return false;if(strcmp(str,ch.str)0) return true;return false;bool i_string:o
9、perator = (i_string i_str1=i_str1.sub(i_str2);if(i_str10=0) return true;return false;if(strcmp(str,ch.str)=0) return true;return false;bool i_string:operator != (i_string i_str1=i_str1.sub(i_str2);if(i_str10=0) return false;return true;if(strcmp(str,ch.str)!=0) return true;return false;bool i_string
10、:operator = (i_string i_str1=i_str1.sub(i_str2);if(i_str10=0) return true;return false;if(strcmp(str,ch.str)=0) return true;return false;bool i_string:operator Figure()i_str1=i_str1.sub(i_str2);if(i_str10len)coutpos;i-) stri=stri-1;strpos=c;len+;strlen=NULL;void i_string:insert(int pos,char *ch) if(
11、poslen)coutpos+k-1;i-) stri=stri-k;for(;i=pos;i-) stri=ch-k;strlen=NULL;void i_string:insert(int pos,i_stringvoid i_string:swap(int p1,int p2)if(p1len|p2len)coutswap(i,len-i+1);void Reserve(char *ch)int Len=strlen(ch);for(int i=0;ilen)coutswap(i+1,p1+p2-1-i);_int64 i_string:valueof()if(len19) cout19
12、) cout9|cp2) swap(p1,p2);ans=1;if(p1len)cout18) cout0) _int64 M=sum;sum=0;while(i=p1)sum=10*sum+M%10;M/=10;i-;return sum; bool i_string:empty()if(str0!=NULL) return false;return true;i_string i_string:substring(int p1,int p2)int ans=0;if(p1p2) swap(p1,p2);ans=1;if(p1len)cout=-len) return this-substr
13、ing(len,len+p2+1);if(p2len|p2substring(1,p2);void i_string:erase(char *dz) char *i=dz;for(;(i+1)!=this-end();i+) *i=*(i+1);str=(char*)realloc(str,len*sizeof(char);*i=NULL;len=len-1;void i_string:remove(char c)int k=0,i;for(i=0;ip2) swap(p1,p2);if(p1len)coutlen)coutp2) swap(p1,p2);if(p1=p2) return;if
14、(p1=0) p1=1;if(p1len)coutlen)coutremove(1,fig);void get_next(char *T,int *next) / 外部辅助函数next0=-1;int k=-1,j=0;while(Tj)if(k!=-1j+;k+;if(Tk=Tj) nextj=nextk;else nextj=k;void i_string:remove(int p1,int p2,char *T) /KMP 求匹配if(p1p2) swap(p1,p2);if(p1len)coutremove(1,len,T);bool i_string:Figure()if(str0=
15、-|(str0=0return true;return false;bool figure(char *ch)if(ch0=-|(ch0=0return true;return false;void i_string:reset()int i;if(len=1) return;if(str0=-) for(i=1;ierase(i-1);if(str1=0) this-remove(1);return;for(i=0;ierase(i);void Reset(char *ch)int i,k,Len=strlen(ch);for(i=0;iFigure()|!figure(s) cout=0;
16、i-) temp=0;for(j=r2/8-1;j=0;j-) di+j+1+=a8i*b8j+temp;temp=di+j+1/M;di+j+1%=M;di+=temp;int sp9, k=0;char *p=new charr1+r2+1;while(d0)spk+=d0%10;d0/=10;for(j=0;k0;k-) pj+=spk-1+0;for(i=1;imul(ch.str);i_string i_string:mul(char c)i_string ch(c); return this-mul(ch);i_string i_string:mul(_int64 fig)if(f
17、ig0)int k=(int)log10(fig*1.0)+1;char *ch=new chark+1;chk=NULL;while(k-) chk=fig%10+0;fig/=10;return this-mul(ch);else if(fig1) ch-k=fig%10+0;fig/=10;ch0=-;return this-mul(ch);i_string ZERO(1);return ZERO;i_string i_string:mul(int fig)return this-mul(_int64) fig);i_string i_string:add(char *c)if(!thi
18、s-Figure()|!figure(c) coutsub(c+1);if(str0=-)i_string STR(c);return STR.sub(str+1);this-reserve();int i,Len=strlen(c);char *ch=new charLen+1;for(i=0;iLen?len:Len;i_string STR(temp);temp=0;if(lenLen) for(i=0;i0) STR.str=(char*) realloc(STR.str,(STR.len+2)*sizeof(char);STR.strSTR.len+=temp+0;STR.strST
19、R.len=NULL;delete ch; this-reserve();STR.reserve();STR.reset();return STR;i_string i_string:add(i_string return this-add(ch.str);i_string i_string:add(char c)char *ch=new char2;ch0=c;ch1=NULL;return this-add(ch);i_string i_string:add(_int64 c)if(c0)int k=(int) log10(c*1.0)+1;char *ch=new chark+1;chk
20、=0;while(k-)chk=c%10+0;c/=10;if(str0=-)i_string STR(ch);return STR.sub(str+1);return this-add(ch);if(csub(-c);return *this;i_string i_string:add(int c)if(c0) return this-add(_int64)c);if(csub(_int64)-c);i_string i_str(*this);i_str.reset();return i_str;i_string i_string:sub(char *s)if(!this-Figure()|
21、!figure(s) coutadd(s+1);if(i_str.str0=-)return i_str.mul(“-1“).add(s).mul(“-1“);i_str.reset(); i_str.reserve(); Reset(ch); Reserve(ch); L=strlen(ch);int i,temp=i_str.lenL?i_str.len:L;i_string STR(temp);temp=0;if(i_str.lenL) for(i=0;i=0)STR.stri=i_str.stri-chi-temp+0;temp=0;elseSTR.stri=i_str.stri-ch
22、i-temp+10+0;temp=1;for(;i=0)STR.stri=i_str.stri-temp;temp=0;elseSTR.stri=i_str.stri-temp+10;temp=1;STR.reserve();STR.reset();return STR;else if(i_str.len=0)STR.stri=chi-i_str.stri-temp+0;temp=0;elseSTR.stri=chi-i_str.stri-temp+10+0;temp=1;for(;i=0)STR.stri=chi-temp;temp=0;elseSTR.stri=chi-temp+10;te
23、mp=1;STR.str=(char*)realloc(STR.str,(L+2)*sizeof(char);STR.strSTR.len+=-;STR.strSTR.len=NULL;STR.reserve(); STR.reset();return STR;else for(i=L-1;i=0;i-)if(i_str.stri!=chi) break;if(ichi)for(i=0;i=0)STR.stri=i_str.stri-chi-temp+0;temp=0;elseSTR.stri=i_str.stri-chi-temp+10+0;temp=1;STR.reserve();STR.
24、reset();return STR;elsefor(i=0;i=0)STR.stri=chi-i_str.stri-temp+0;temp=0;elseSTR.stri=chi-i_str.stri-temp+10+0;temp=1;STR.str=(char*)realloc(STR.str,(L+2)*sizeof(char);STRSTR.len+=-;STRSTR.len=NULL;STR.reserve(); STR.reset();return STR;i_string i_string:sub(i_string return this-sub(ch.str);i_string
25、i_string:sub(char c)char *ch=new char2;ch0=c;ch1=NULL;return this-sub(ch);i_string i_string:sub(_int64 c)if(c0)int k=(int) log10(c*1.0)+1;char *ch=new chark+1;chk=0;while(k-)chk=c%10+0;c/=10;return this-sub(ch);if(cadd(-c);return *this;i_string i_string:sub(int c)if(c0) return this-sub(_int64)c);if(cadd(_int64)-c);i_string i_str(*this);i_str.reset();return i_str;/main 函数/int main() /测试i_string s0,s1(“-00999900“),s2(“-00123“),s3(1,3),s4(“123“,3),s5(s4),s6(6);couts0;couts0endl;coutendl;cout“其他测试: 略“endl;return 0;