自定义字符串操作
来源:互联网 发布:软件助手ios版 编辑:程序博客网 时间:2024/06/18 13:36
#include<iostream>#include<cstdlib>#include<vector>#include<iomanip>using namespace std;class HString{private:char kind[2];//操作类型char *str; //字符串int length; //字符串长度public:HString(){str=NULL;//初始化length=0;}void SetKind(char s)//设置操作类型{kind[0]=s;kind[1]='\0';}char* getKind()//获取操作类型{return kind;}char* getStr()//获取字符串{return str;}void InitHString(char *s)//初始化自定义字符串{ length=0;str=new char[100];while(*s){str[length++]=*s;s++;}str[length]='\0';}void getLength()//获取字符串的长度{cout<<length<<endl;}void Equality(char* s)//判断两字符串是否相等{char *pStr,*pStr1;pStr = str;pStr1 = s; while(*pStr && *pStr1 && *pStr==*pStr1) pStr++,pStr1++;if(*pStr==*pStr1 && *pStr=='\0')cout<<"EQUAL"<<endl;elsecout<<"UNEQUAL"<<endl;}void CatHString(char* s)//字符串联接{ int i=0; while(*s) { str[length+i++]=*s; s++; } length+=i; str[length]='\0';}void HStringSub(int a,int b) //获取子串,a为初始下标位置,b为子串的长度{ char str1[100]; if(a+b>length) b=length-a; //如果越界,重置 for(int i=a;i<a+b;i++) str1[i-a]=str[i]; str1[b]='\0'; cout<<str1<<endl;}void index(char *s) //获取相同子串的初始位置{if(s==NULL) {cout<<"错误"<<endl;return;}char *p=str,*q=s;int len=0,flag=0;while(*q) len++,q++;q=s;while(*p!='\0'){q=s;if(*p==*q) //如果第一个字符相等,进入循环,如果q==NULL 说明s是子串while(*q && *p && *p==*q) {p++;q++;} elsep++;if(*q=='\0') {flag=1;break;}}if(flag==1) //如果找到,要减去s的长度就是初始位置,否则输出错误cout<<p-str-len<<endl;elsecout<<"参数非法"<<endl;}void replace(char *s,char *s1) //代替函数{if(s1==NULL || s==NULL) {cout<<"错误"<<endl;return;} char *p=str,*q=s,dst[100],*k;int len=0,flag=0,i=0,j;while(*q) len++,q++;q=s;while(*p!='\0'){q=s;dst[i]=*p;if(*p==*q)while(*q && *p && *p==*q) {dst[i]=*p;p++;q++;i++;} elsep++,i++;if(*q=='\0') //如果找到子串{flag=1; k=s1;i-=len; //说明之前做的赋值没作用while(*k){dst[i++]=*k++;}}}dst[i]='\0';cout<<dst<<endl;}};void Show(vector<HString>&vt) //显示操作类型和字符串{vector<HString>::iterator it=vt.begin(); //迭代器遍历for(;it!=vt.end();++it){cout<<it->getKind()<<" "<<it->getStr()<<endl;}}void Delete(vector<HString>&vt,char ch) //删除同类型的操作{vector<HString>::iterator it=vt.begin();if(ch>='a' && ch<='z') ch=ch-32;for(;it!=vt.end();)if(it->getKind()[0]==ch || it->getKind()[0]==ch+32){ it=vt.erase(it);}elseit++;}void main(){char ch;vector<HString> vtHStr;cout<<"*******************************字符串的操作******************************"<<endl;cout<<"A.赋值"<<"E.判相等"<<"C.联接"<<"L:求长度"<<"S.求子串"<<"I.子串定位"<<"R.串替换"<<"P.显示"<<"D.删除"<<"Q.退出"<<endl;while(1){HString str;char s[100],s1[100];int a,b;cin>>ch;str.SetKind(ch);switch(ch){case 'A':case 'a':cin>>s;str.InitHString(s);cout<<str.getStr()<<endl;vtHStr.push_back(str);break;case 'E':case 'e':cin>>s; str.InitHString(s);cin>>s;str.Equality(s);vtHStr.push_back(str);break;case 'C':case 'c':cin>>s;str.InitHString(s);cin>>s;str.CatHString(s);cout<<str.getStr()<<endl;vtHStr.push_back(str);break;case 'L':case 'l':cin>>s;str.InitHString(s);str.getLength();vtHStr.push_back(str);break;case 'S':case 's':cin>>s;str.InitHString(s);cin>>a>>b;str.HStringSub(a,b);vtHStr.push_back(str); break;case 'I':case 'i':cin>>s;str.InitHString(s);cin>>s;str.index(s);vtHStr.push_back(str);break;case 'R':case 'r': cin>>s;str.InitHString(s);cin>>s;cin>>s1;str.replace(s,s1);vtHStr.push_back(str);break;case 'P':case 'p':Show(vtHStr);break;case 'D':case 'd':cin>>ch;Delete(vtHStr,ch);break;case 'Q':case 'q':return ;}}}
0 0
- 自定义版字符串操作
- 自定义字符串操作
- 自定义JS 字符串操作函数
- Perl 字符串操作 以及 自定义排序
- c语言自定义方法实现字符串的7个操作
- 操作符重载专题强化训练-自定义字符串类
- C语言中字符串的逆序、字符串转整数、整数转字符串、自定义字符串操作(strcpy、strlen、strcat、strcmp)
- 字符串操作
- 字符串操作
- 操作字符串
- 字符串操作
- 字符串操作
- 字符串操作
- 字符串操作
- 字符串操作
- 字符串操作
- 字符串操作
- 字符串操作
- iOS instrument工具详解
- 黑马程序员_7K面试题之银行业务调度系统
- 深入C++的new
- 七大内部排序算法总结(插入排序、希尔排序、冒泡排序、简单选择排序、快速排序、归并排序、堆排序)
- Eclipse设置之代码模版
- 自定义字符串操作
- Android开发历程_1(从1个activity跳转到另一个activity)
- Moving Tables +hdu+贪心
- input 和fmt:dateFormate结合使用
- 寒城攻略:Listo 教你 25 天学会 Swift 语言 - 21 Nested Types
- 分析外链对关键词有什么作用
- 程序员面试金典-数组和字符串
- 硬盘分区、卷(有关动态磁盘)、簇
- JavaScript1.6数组新特性介绍以及JQuery的几个工具方法