来源:互联网 发布:网络歌手阿刚 编辑:程序博客网 时间:2024/04/30 13:39
#include <iostream>#include <cstdio>static const int Maxlen = 100;using namespace std;typedef struct{char ch[Maxlen];int len;}String;class S{public:S(){                                          //构造函数初始化S1.len = 0;}int Strassign ();                             //输入字符串void Dispstr();                                //输出字符串void Assign(char s[]);                               //赋值void Length();                                       //取长void Concat(char s1[], int choose_head_or_end);      //连接void Substring(int l1, int l2);int Replace(char z[], int length);int Strinsert(char str[],  int pos);           //插入子串int Strdelete(int pos, int len);               //删除子串private:String S1;};int S :: Strassign()                                //输入字符串实现{if(S1.len != 0){cout << "早已初始化,请选择 3.赋值 操作修改字符串。" << endl;    return 0;}scanf ("%s", &S1);for(int i = 0; S1.ch[i] != '\0'; i++);S1.len = i;}void S :: Dispstr()                                     //输出字符串实现{for(int i = 0; S1.ch[i] != '\0'; i++)printf("%c",S1.ch[i]);printf("\n");}void S :: Assign(char s[]){for(int i = 0; S1.ch[i] != '\0'; i++)S1.ch[i] = '\0';                            //首先将需被赋值字符串清空for(i = 0; s[i] != '\0'; i++)S1.ch[i] = s[i];                              //赋值S1.ch[i+1] = '\0';for(i = 0; S1.ch[i] != '\0'; i++)               //重新获得字符串长度;S1.len = i;}void S :: Length(){cout << "当前字符串长度为" << S1.len << endl;}void S :: Concat (char s1[], int choose_head_or_end){int *pi = new int;                          // 衡量输入字符串的长度for(int i = 0; s1[i] != '\0'; i++)          // 获取输入字符串长;*pi = i;if(choose_head_or_end == 1){                 //连入现有字符串前面for(i = S1.len-1; i >= 0; i--)           //先将现有字符串集体后移,移动长度为输入字符串长度S1.ch[i + *pi] = S1.ch[i];S1.ch[S1.len  + *pi] = '\0';for(i = 0; i < *pi; i++)                //把输入字符串的值赋到空出的现有字符串前S1.ch[i] = s1[i];S1.len += *pi;                           //将表示长度的变量加上输入字符串的长度}else if(choose_head_or_end == 2){             //连入现有字符串后面for(i = 0; i < *pi; i++)               {S1.ch[S1.len] = s1[i];    S1.len ++;                           //在这一过程中自然改变长度值}S1.ch[S1.len] = '\0';}else{ cout << "输入错误"  << endl; }delete pi;}void S :: Substring (int l1, int l2){for(int i = l1 - 1; i < l1 - 1 + l2; i++ ){cout << S1.ch[i];}printf("\n");}int S :: Replace (char z[], int length)                     //子串替换{for(int i = 0; z[i] != '\0'; i ++)                       //取子串长;if(i + length > S1.len){cout << "越界" << endl;return 0;}for(i = 0; z[i] != '\0'; i ++){S1.ch[i+length-1] = z[i];}return 1;}int  S :: Strinsert(char str[],  int pos){if(pos > S1.len){cout << "输入越界"  << endl;return 0;}int length;for(int i = 0; str[i] != '\0'; i ++)                       //取子串长;length = i;for (i = S1.len; i > pos-1; i -- )S1.ch[i + length -1] = S1.ch[i-1];                        //元素后移,为要插入元素腾出空余。S1.ch[S1.len + length ] = '\0';for (i = 0; i < length; i++)                              //赋值{S1.ch[pos + i -1] = str[i];}    S1.len += length; return 1;}int S :: Strdelete(int pos, int len){for (int i = pos - 1; i < pos - 1 + len; i ++)                    //先删除要删除的子串S1.ch[i] = '\0';for(i = pos - 1 + len; i <= S1.len - 1; i++)                      //删除的子串后面元素前移S1.ch[i - len] = S1.ch[i];S1.len -= len;                                                    //长度减删除子串长    S1.ch[S1.len] = '\0';                                             //剃掉多余的return 1;}void main(){S MyString;int If_End = 0;int Choose;while (If_End == 0){cout << "请选择操作: 1.输入字符串。2.输出字符串。 3.赋值。4.取长。 5.连接。" ;cout << "6.返回字符串子串。 7.子串的替换。8.子串插入。 9.删除子串。 10.结束。" << endl;cin >> Choose;switch (Choose){case 1:cout << "请输入:(输入字符串长度应不超过100)" ;MyString.Strassign();break;case 2:MyString.Dispstr();    break;case 3:{char *pq = new char [Maxlen];    cout << "请输入要赋的值"  << endl;    scanf ("%s",&*pq);    MyString.Assign(pq);    delete [] pq;    break;}case 4:MyString.Length();break;case 5:{int *py = new int;char *pu = new char [Maxlen];cout << "首先输入字符串" ;scanf("%s",&*pu);cout << "你是想把输入的字符串接到现有字符串前(输入一),还是现有字符串后(输入二)";cin >> *py;MyString.Concat(pu,*py);delete py;delete pu;break;}case 6:{int *pa = new int;    int *ps = new int;    cout << "请先输入从第几个元素开始" << endl;    cin >> *pa;    cout << "请输入子串长度"  << endl;    cin >> *ps;    MyString.Substring(*pa,*ps);    delete pa;    delete ps;    break;}case 7:{cout << "请先输入要替换的子串" << endl; char *pd = new char [Maxlen];scanf("%s",&*pd);int *pf = new int;cout << "输入要替换的开始位置" << endl;cin >> *pf;MyString.Replace(pd,*pf);delete pd;delete pf;break;}case 8:{char *pv = new char [Maxlen];    int *pb = new int;    cout << "输入要插入的子串" << endl;    scanf ("%s",&*pv);    cout << "输入在第几个元素前插入(整型变量)" << endl;    cin >> *pb;    MyString.Strinsert(pv,  *pb);delete pv;delete pb;    break;}case 9:{int *delete_str = new int;int *delete_len = new int;cout << "请先输入删除子串位置" << endl;cin >> *delete_str ;cout << "请输入删除子串长度" << endl;cin >> *delete_len;                    MyString.Strdelete(*delete_str,*delete_len);delete delete_str;delete delete_len;break;}case 10:                 If_End = 1;break;default:cout << "输入有误" << endl;break;}}}

原创粉丝点击