C++课程设计 (字符串操作).doc_第1页
C++课程设计 (字符串操作).doc_第2页
C++课程设计 (字符串操作).doc_第3页
C++课程设计 (字符串操作).doc_第4页
C++课程设计 (字符串操作).doc_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

#include #include #include #include #include #include /定义参数个数可变的函数时用到#define MAX_FSTRING_LENGTH 250 /用作数组长度/Variant Classclass FString / 字符串类定义private:char*sString;/String data must be first (to look like string)int nlength;public:/ConstructorFString(); /缺省构造函数FString(char *str);/新增构造函数,用字符串常量初始化字符串对象FString(FString &);/新增拷贝构造函数,用类的对象初始化FString() /新增析构函数,释放字符串对象所占用的空间/Public Methodsvoid DelRepeat(); FString AddStart(FString str,int start);FString Mid(const int nStart,const int nLength);FString Left(const int nLength);FString Right(const int nLength);int InStr(const int nStart, const char *sSearch,const bool bCaseSensitive=true);int InStrRev(const int nStart, const char *sSearch,const bool bCaseSensitive=true);FString RTrim(const char sChar= );FString LTrim(const char sChar= );FString Trim(const char sChar= );FString Replace(const char *sSearch, const char *sReplace);FString Format(const char *sFormat, .);int Length();/Various Operatorsinline operator char*(); /转换函数inline FString operator+(const char *sAppend);inline FString operator+(const FString sAppend);inline FString operator-(const char *sAppend);inline FString operator-(const FString sAppend);inline char operator(const int nIndex);inline FString operator+=(char* val);inline FString operator+=(FString val);inline FString operator-=(char *val);inline FString operator-=(FString val);/Comparison Operatorsinline int operator(const char *val);inline int operator(const char *val);inline int operator=(const char *val);inline int operator!=(const char *val);inline int operator=(const char *val);inline int operator(const FString val);inline int operator(const FString val);inline int operator=(const FString val);inline int operator!=(const FString val);inline int operator=(const FString val);/Assignment OperatorsFString operator=(const char *val);FString operator=(const FString val);/- FString Class, Greg De Haas - 27 March 2002 -/This is a simple string class that can come in useful/Ive kept the naming conventions similar to VB for simplicity/-/下面是 GFHString.h 中说明的各函数的具体定义/ConstructorFString:FString() sString=0;nlength=0; FString:FString(char *str)if(str)nlength=strlen(str); sString=new charnlength+1; strcpy(sString,str);else sString=0;nlength=0;FString:FString(FString &str)nlength=str.nlength;if(str.sString)sString=new charnlength+1;strcpy(sString,str.sString);elsesString=0;/Comparisonsint FString:operator(const char *val) return(strcmp(sString,val) 0); int FString:operator=(const char *val) return(strcmp(sString,val) (const char *val) return(strcmp(sString,val) 0); int FString:operator=(const char *val) return(strcmp(sString,val) = 0); int FString:operator!=(const char *val) return(strcmp(sString,val) != 0); int FString:operator=(const char *val) return(strcmp(sString,val) = 0); int FString:operator(const FString val) return(strcmp(sString,val.sString) 0); int FString:operator=(const FString val) return(strcmp(sString,val.sString) (const FString val) return(strcmp(sString,val.sString) 0); int FString:operator=(const FString val) return(strcmp(sString,val.sString) = 0); int FString:operator!=(const FString val) return(strcmp(sString,val.sString) != 0); int FString:operator=(const FString val) return(strcmp(sString,val.sString) = 0); /Other operatorsFString FString:operator+=(char* val) FString t=sString,t1;t1.nlength=t.nlength+strlen(val);t1.sString=new chart1.nlength+1;strcpy(t1.sString,sString);strcat(t1.sString,val);sString = _strdup(t1.sString);return(*this);FString FString:operator+=(FString val) FString t=sString,t1;t1.nlength=t.nlength+val.nlength;t1.sString=new chart1.nlength+1;strcpy(t1.sString,sString);strcat(t1.sString,val.sString);sString = _strdup(t1.sString);return(*this);FString FString:operator-=(char *val) /新增函数,重载减法运算符FString t=sString;char *p1,*p2;if(p2=strstr(sString,val)p1=p2+strlen(val);while(*p2+=*p1+);return t;FString FString:operator-=(FString val) /新增函数,重载减法运算符 FString m=sString;char *q1,*q2;if(q2=strstr(sString,val.sString)q1=q2+val.nlength;while(*q2+=*q1+);return m;char FString:operator(const int nIndex) /数组下标运算符重载if (nIndex (int)strlen(sString) return(0); /判断下标是否越界return(sStringnIndex-1);FString:operator char*() return(_strdup(sString); FString FString:operator+(const char *sAppend) FString t=sString;t.nlength=nlength+strlen(sAppend);t.sString=new chart.nlength+1;strcpy(t.sString,sString);strcat(t.sString,sAppend);return t;FString FString:operator+(const FString sAppend) FString t;t.nlength=nlength+sAppend.nlength;t.sString=new chart.nlength+1;strcpy(t.sString,sString);strcat(t.sString,sAppend.sString); return t;FString FString:operator-(const char *sAppend) /新增函数,重载减法运算符FString t=sString;char *p1,*p2;if(p2=strstr(sString,sAppend)p1=p2+strlen(sAppend);while(*p2+=*p1+);return(*this); FString FString:operator-(const FString sAppend) /新增函数,重载减法运算符FString t=sString;char *p1,*p2;if(p2=strstr(sString,sAppend.sString)p1=p2+strlen(sAppend.sString);while(*p2+=*p1+);return(*this); FString FString:operator=(const char *val) if(sString) delete sString;nlength=strlen(val);sString=new charnlength+1;strcpy(sString,val); return(*this); FString FString:operator=(FString val) sString = _strdup(val.sString); return(*this); FString FString:AddStart(FString str,int start) /新增成员函数,将字符串str插入到原字符串中从第start字符开始的位置上char qMAX_FSTRING_LENGTH=;strncpy(q,sString,start-1);strcat(q,str.sString);strcat(q,sString+start-1); sString = _strdup(q);return(*this);void FString:DelRepeat() /新增成员函数,删除原字符串中相邻的重复字符int n;char sAnsMAX_FSTRING_LENGTH=;n=strlen(sString);for(int i=0;in;i+)if(sStringi+1=sStringi)for(int j=i;jn;j+)sStringj=sStringj+1;DelRepeat();strcpy(sAns,sString); sString = _strdup(sAns);/coutsStringRTrim(sChar).LTrim();/注意此处的用法!/Trim right characters-串尾整理,即去掉串尾与 sChar 相同的字符FString FString:RTrim(char sChar) long nLen = strlen(sString);FString sAns2;int cnt=nLen-1;sAns2 = sString;/Validateif (nLen = 0) return(sAns2);/Determine # of charswhile (sStringcnt = sChar & cnt=0) cnt-;if (cnt = (nLen-1) return sAns2;/Get characterschar *sAns=new charcnt+1;strncpy(sAns,sString,cnt+1);sAns2 = sAns;return(sAns2);/Trim left characters-串首整理,即去掉串首与 sChar 相同的字符FString FString:LTrim(char sChar) long nLen = strlen(sString);FString sAns2;int cnt=0;sAns2 = sString;/Validateif (nLen = 0) return(sAns2);/Determine # of charswhile (sStringcnt = sChar) cnt+;if (cnt = 0) return sAns2;/Get characterschar *sAns=new charnLen-cnt;strncpy(sAns,sString+cnt,nLen-cnt);sAns2 = sAns;return(sAns2); /Returns the characters from nStart of nLength characters/从字串 sString 中第 nStart 个字符开始取出 nLength 个字符FString FString:Mid(int nStart,int nLength) FString sAns2;long nLen = strlen(sString);sAns2 = ;/Validateif (nLen = 0) return(sAns2);if (nLength nLen) nLength = nLen;/Get characterschar *sAns=new charnlength;strncpy(sAns,sString+(nStart-1),nLength);sAns2 = sAns;return(sAns2); FString FString:Left(int nLength) charsAnsMAX_FSTRING_LENGTH=;FString sAns2;long nLen = strlen(sString);sAns2 = ;/Validateif (nLen = 0) return(sAns2);if (nLength nLen) nLength = nLen;/Get charactersstrncpy(sAns,sString,nLength);sAns2 = sAns;return(sAns2); /Returns the right nLength chars-从字串 sString 右边取出 nLength 个字符FString FString:Right(int nLength) charsAnsMAX_FSTRING_LENGTH=;FString sAns2;long nLen = strlen(sString);sAns2 = ;/Validateif (nLen = 0) return(sAns2);if (nLength nLen) nLength = nLen;/Get charactersstrncpy(sAns,sString+(nLen-nLength),nLength);sAns2 = sAns;return(sAns2); /Finds position of sSearch in string, starting with position nStart-寻找子串位置int FString:InStr(const int nStart, const char *sSearch, const bool bCaseSensitive) /Get Lengthsint nLen1 = strlen(sSearch);int nLen2 = strlen(sString); /Other varsint cnt=nStart-1;int cnt2=0;bool bFound;int nMax = (nLen2-nLen1+1);bool bTest;/Validationif (cnt (nLen2-nLen1+1) return(0);/Recurse Stringfor (cnt=cnt;cntnMax;cnt+) /Test first charbTest = (bCaseSensitive) ? (sStringcnt = sSearch0) : (tolower(sStringcnt) = tolower(sSearch0);if (bTest) /correctbFound = true;/Default to found/Recurse + test all chars in sSearchfor (cnt2=0; cnt2nLen1;cnt2+) if (bCaseSensitive) if (!(sStringcnt2+cnt = sSearchcnt2) bFound = false; else if (!(tolower(sStringcnt2+cnt) = tolower(sSearchcnt2) bFound = false;if (bFound) return(cnt+1);/Found!return 0; /Not Found/Finds position of sSearch in string in reverse, starting at position nStart/寻找子串的倒置串在主串中的位置int FString:InStrRev(const int nStart, const char *sSearch, const bool bCaseSensitive) /Get Lengthsint nLen1 = strlen(sSearch);int nLen2 = strlen(sString); /Other varsint cnt=nStart-nLen1;int cnt2=0;bool bFound;bool bTest;/Validationif (cnt (nLen2-nLen1+1) cnt = (nLen2-nLen1+1);/Recurse Stringfor (cnt=cnt;cnt=0;cnt-) /Test first charbTest = (bCaseSensitive) ? (sStringcnt = sSearch0) : (tolower(sStringcnt) = tolower(sSearch0);if (bTest) /correctbFound = true;/Default to found/Recurse + test all chars in sSearchfor (cnt2=0; cnt2nLen1;cnt2+) if (bCaseSensitive) if (!(sStringcnt2+cnt = sSearchcnt2) bFound = false; else if (!(tolower(sStringcnt2+cnt) = tolower(sSearchcnt2) bFound = false;if (bFound) return(cnt+1);/Found!return 0; /Not Found/Format-按指定格式输出FString FString:Format(const char *sFormat, .) /参数可变的函数char buffer20000=;FString sAns;sAns = ; if (!sFormat) return(sAns); / make sure string is valid va_list arglist; / variable argument list /print out the string using the variable number of arguments on stack va_start(arglist,sFormat); vsprintf(buffer,sFormat,arglist); va_end(arglist);sAns = buffer;return(sAns);/Replaces any occurrence of sSearch with sReplace/用子串*sReplace 去替换主串中的所有子串*sSearchFString FString:Replace(const char *sSearch, const char *sReplace) int nSearchLen=strlen(sSearch);int nPos=0;int nDiffLen=strlen(sReplace)-strlen(sSearch);FString sTemp;FString sLeft, sRight;sTemp = sString;/Recurse stringnPos = sTemp.InStr(nPos+1,sSearch);while (nPos != 0) sLeft = sTemp.Left(nPos-1);sRight = sTemp.Right(strlen(sTemp.sString)-nPos+1)-nSearchLen);sTemp = sLeft + sReplace + sRight;nPos = sTemp.InStr(nPos + nDiffLen+1,sSearch);return sTemp;/Returns Lengthint FString:Length() return(strlen(sString); void menu()coutnnntttt字符串操作 ntttt主菜单 nnnt1.)字符串加法。nt2.)字符串减法。nt3.)字符串比较大小。nt4.)对字符串的具体操作。nt5.)Exitn endl;void submenu()coutPlease enter your choice:endl;cout endl;cout 1) 删除字符串首部相同字符endl;cout 2) 删除字符串尾部相同字符endl;cout 3) 删除字符串的所有重复字符endl;cout 4) 字符串的插入操作endl;cout 5) 字符串的替换操作endl;cout 6) Exitendl; cout endl;void F1(FString s) /字符串加法 FString s2,s3(good!);cout请输入要操作的字符串endl;char *p=new char100; cin.getline(p,100);coutendl; char *p1=new char100; cin.getline(p1,100);s+=p1; /1s2=s+p1;/2cout结果为:sendl;cout endl;delete p;delete p1;/*/void F2(FString s) /字符串减法FString sk;cout请输入要操作的字符串endl;char *p=new char100; cin.getline(p,100); char *p1=new char100; cin.getline(p1,100);sk=s-p1;cout结果为:skendl;delete p;delete p1;void F3(FString s) /字符串比较大小cout请输入要操作的字符串endl;char *p=new char100; cin.getline(p,100);coutendl; char *p1=new char100; cin.getline(p1,100);if(sp1)cout结果为:sp1p1)cout结果为:sp1endl;else if(s=p1)cout结果为:s=p1endl;delete p;delete p1;void F41(FString s3) /删除字符串首部相同字符 FString s1=s3;for(int i=1;i=s3.Length()&s3i=s3i+1;i+)s1=s3.LTrim(s3i);coutresult:s1=1&s3l=s3l-1;l-)s1=s3.RTrim(s3l);coutresult:s1endl;void F43(FString s3) /删除字符串的所有重复字符FString s4(s3);couts:s4endl;coutresult:;s4.DelRepeat();couts4n;void F44(FString s3) /字符串的插入操作 int m;coutm;char *p=new char100;cin.getline(p,100);char *p1=new char100;cout输入插入字符串:;cin.ge

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论