sophia1010的专栏

好好静心读书啦

串的基本操作
#include<iostream.h>
#include<stdlib.h>
#include<string.h>

class String
{
private:
	char *m_data;
public:
	String( )
	{
		m_data=new char[1];
		m_data='\0';
	}
	String(const char* str)
	{
		if(str==NULL)
		{
			m_data=new char[1];
			*m_data='\0';
		}
		else
		{
			int len=strlen(str);
			m_data=new char[len+1];
			strcpy(m_data,str);
			//m_data[len]='\0';
		}
	}
	String(const String &other)
	{
		
	    int len=strlen(other.m_data);
		m_data=new char[len+1];
		strcpy(m_data,other.m_data);
	//	m_data[len]='\0';
	}

	bool StrEmpty()
	{
		return *m_data=='\0';
	}
	int StrLen()
	{
		return strlen(m_data)+1;
	}
	int StrCompare(String &other)
	{
		if(m_data=='\0'&&other.m_data=='\0')return 0;
		if(m_data=='\0'&&other.m_data!='\0')return -1;
		if(m_data!='\0'&&other.m_data=='\0')return 1;
        char *s1=m_data;
		char *s2=other.m_data;
		int k=*s1-*s2;
		while(!k&&*s1!='\0'&&*s2!='\0')
		{
			k=*(++s1)-*(++s2);
		}
	    return k;
	}
	String& StrConcat(String &T,String &other)
	{
		int len1=strlen(m_data);
		int	len2=strlen(other.m_data);
		T.m_data=new char[len1+len2+1];
		strcpy(T.m_data,m_data);
		strcpy(T.m_data+len1,other.m_data);
		return T;
	}
	String& operator=(const String &other)
	{
		if(this==&other)
		{
			return *this;
		}
		delete []m_data;
		int len=strlen(other.m_data);
		m_data=new char[len+1];
		strcpy(m_data,other.m_data);
		return *this;
	}
    String& StrSub(String &sub,int pos,int len)
	{
		
		if(1<=pos&&pos<=StrLen()\
			 &&0<=len&&len<=StrLen()-pos+1)
		{
			delete []sub.m_data;
			sub.m_data=new char[len+1];
			strncpy(sub.m_data,m_data+pos,len);
			sub.m_data[len]='\0';//????
		}
		return sub;
	}
		String& StrDelete(int pos,int len)
	{
        if(1<=pos&&pos<=StrLen()&&
			0<=len&&len<=StrLen()-pos+1)
		{
			int len2=StrLen()-len;
            String tmp(m_data);
			delete []m_data;
			m_data=new char[len2];
			strncpy(m_data,tmp.m_data,pos-1);
			strncpy(m_data+pos-1,tmp.m_data+pos-1+len,len2-pos);
			m_data[len2-1]='\0';
		}
		return *this;
	}
    int Index(String &other,int pos)
	{
		int n=strlen(m_data);
		int m=strlen(other.m_data);
		int i=pos;
		String sub;
		if(pos>0)
		{
			while(i<=n-m+1)
			{
				StrSub(sub,i,m);
				if(other.StrCompare(sub)==0){return i+1;}
				else{i++;}
			}
		}
		return 0;
	}
     
	String &StrInsert(String& other,int pos)
	{
		int len1=strlen(m_data);
		int len2=strlen(other.m_data);
		if(1<=pos&&pos<=StrLen())
		{
			String tmp(m_data);
		    delete []m_data;
			m_data=new char[len1+len2+1];
			strncpy(m_data,tmp.m_data,pos-1);
			strncpy(m_data+pos-1,other.m_data,len2);
			strncpy((m_data+pos+len2-1),tmp.m_data+pos-1,len1-pos+2);
		}
		else
		{
			cout<<"输入参数错误!!!"<<"weiqian"<<endl;
		}
		return *this;
	}

	String& Replace(String &str1,String &str2,int pos)
	{
        int len1=strlen(str1.m_data);
		int len2=strlen(str2.m_data);
		 while(m_data[pos-1]!='\0'&& pos<StrLen())
		 {
             pos=Index(str1,pos);
			 cout<<pos<<endl;
		     StrDelete(pos,len1);
			 StrInsert(str2,pos);
			 pos+=len2;
		 }
		 return *this;
	}
	~String()
	{
		delete []m_data;
	}
	friend ostream &operator<<(ostream &out,String& str)
	{
		if(str.m_data!=NULL)
		{
			out<<str.m_data<<endl;
		}
		return out; 
	}

};
void main()
{
	String str1("[meme");
	cout<<str1;
    String str2("me");
	String str3("QQ");
	str1.Replace(str2,str3,1);
	cout<<str1;
}

阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sophia1010/article/details/39121733
个人分类: 数据结构
想对作者说点什么? 我来说一句

数据结构C语言串的基本操作

2011年06月28日 4KB 下载

没有更多推荐了,返回首页

不良信息举报

串的基本操作

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭