第十二週專案訓練5
阿新 • • 發佈:2019-02-19
/*
*Copyright(c) 2016.煙臺大學計算機與控制工程學院
*ALL rights reserved.
*檔名稱:main.cpp
*作者:王璵璠
*完成日期:2016年6月16日
問題描述:
請構造String類的加、減運算(s1+s2將兩個字串的連線起來;s1-s2是將s1的尾部空格和s2的前導空格去除後的連線)
程式:#include <iostream> #include<Cstring> using namespace std; class String { public: String();//預設建構函式 String(char *s); String(String &str);//建構函式 ~String(); void display(); friend String operator+(String &s1,String &s2); friend String operator-(String &s1,String &s2); private: char *p; //指向儲存的字串 int len; //記錄字串的長度 }; String::String() { len=0; p=NULL; } String::String(char *s) { len=strlen(s); p=new char[len+1]; strcpy(p,s); } String::String(String &str) { len=str.len; if(p!=NULL) delete []p; //當發生在賦值等情形時,原物件可能已經存在,需釋放原有空間 p=new char[len+1]; strcpy(p,str.p); } String::~String() { if(!p)delete []p; } void String::display( ) { cout<<p<<endl; } String operator+(String &s1,String &s2) { String s; s.len=s1.len+s2.len; s.p=new char[s.len+1]; strcpy(s.p,s1.p); strcat(s.p,s2.p); return s; } String operator - (String &s1, String &s2 ) { String s; //c1為截去尾部空格的字串 char *c1=new char[s1.len+1]; strcpy(c1,s1.p); int i=s1.len-1; while(i>=0&&c1[i]==' ') --i; c1[i+1]='\0'; //c2為去除前導空格的字串 char *c2=new char[s2.len+1]; strcpy(c2,s2.p); i=0; while(i<s2.len&&c2[i]==' ') ++i; int j=0; while(i<s2.len&&c2[i]!='\0') { c2[j]=c2[i]; ++i; ++j; } c2[j]='\0'; //將這兩部分接起來 s.len = strlen(c1)+strlen(c2); s.p = new char[s.len+1]; strcpy(s.p,c1); strcat(s.p,c2); delete c1; delete c2; return s; } int main() { String string1("Hello "),string2(" World"); string1.display(); string2.display(); String string3; string3=string1+string2; string3.display(); string3=string1-string2; string3.display(); return 0; }
執行結果: