串
来源:互联网 发布:网络歌手阿刚 编辑:程序博客网 时间: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;}}}