C++求解字符串(最小子字符串,最大子字符串,删除指定字符串)
#include <iostream> #include <string.h> #define SIZE 10 #define MAXVALUE 0x7fffffff using namespace std; //题目是:求一个字符串中最小字串. //求最小字串,比求最大字串难的多,下面有我的求最大字串代码,我没有想到更好的方法,下面的这个方法虽然空间复杂度太大,可是时间复杂度是比较快的。 template<typename T> struct Node { T data;//数据 int index;//保存下标。 }; template<typename T> class MyNode { public: MyNode(T *a=NULL,int sz = SIZE,T a1=T(),T a2=T())//开始我的结构,将包含a1,a2的所有位置都存储在节点里面。 { node = new Node<T>[sz]; size=0; for(int i=0;i<sz;i++) { if(a[i]==a1) { node[size].data = a1; node[size].index = i; size++; } if(a[i]==a2) { node[size].data = a2; node[size].index = i; size++; } } } int Mindex(int &x,int &y)//得到最小子串的下标x,y。 { int n = size-1; int min=MAXVALUE; for(int i=n;i>0;i--) { for(int j=i-1;j>=0;j--) { if(node[i].data!=node[j].data) { if((node[i].index-node[j].index)<min) { min = node[i].index-node[j].index; y = node[i].index; x = node[j].index; } } } } return 0; } char *GetStrMin(int x,int y,char *str)//跟据下标得到最小字符串. { char *p = str; p += x; *(str+y+1)='\0'; return p; } private: int size; Node<T> *node; }; int main() { char a[]="cbbbbbbaaaaabbbc"; MyNode<char> mynode(a,strlen(a),'a','c');//这里ac的顺序不用考虑. int x,y; mynode.Mindex(x,y); cout<<mynode.GetStrMin(x,y,a)<<endl; return 0; } ---------------------------------------------------------- #include <iostream> #include <string.h> //此处是最大字串的求解,较之最小字符串的求解要简单的多. using namespace std; char* MinStr(char *str,char a1,char a2) { char *p = str; char *q = str+strlen(str)-1; while(1) { if(*p==a1 || *p==a2) break; p++; } while(1) { if(((*p==a1)&&(*q==a2)) || ((*p==a2)&&(*q==a1))) break; q--; } *q='\0'; return p; } int main() { char a[]="babbbbbbbcc"; cout<<MinStr(a,'a','c')<<endl; return 0; } ---------------------------------------------------------------- #include <iostream> using namespace std; //在字符串中删除特定的字符(字符串)。 //题目:输入两个字符串,从第一字符串中删除第二个字符串中所有的字符。 //例如,输入”They are students.”和”aeiou”, //则删除之后的第一个字符串变成”Thy r stdnts.”。 char *Grial(char *str,char *s1) { char *p = str; char *q = s1; while(*q!='\0') { while(*p!='\0') { while(*p!=*q && *p!='\0') { p++; } char *m = p; while(*m!='\0') { *m=*(m+1); m++; } } q++; p=str; } return str; } int main() { char a[]="123456 23A AB234"; char b[]="23"; cout<<Grial(a,b)<<endl; }
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。