#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;
}
C++求解字符串(最小子字符串,最大子字符串,删除指定字符串)
最新推荐文章于 2023-11-12 16:34:47 发布