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;
}

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。