用C++语言实现String类

   更新日期:2024.05.29

#include <iostream>

using namespace std;

class MyString 

{

public:

void Zero();

MyString();

~MyString();

void zeroStr(){if(m_string) {delete m_string;m_string=0;}}

MyString(const char* str);

MyString(MyString & str);

MyString & operator=(const MyString & str);//这里用的是引用返回,所用一定要用this指针

MyString & operator=(const char* c_str);//这里用的是引用返回,所用一定要用this指针

char operator[](const unsigned int index);

MyString strcat(const MyString & str);

MyString strcat(const char * c_str);

bool operator>(const MyString &str);

/*其余部分因时间关系,我就不写了,不过可以参考以上的方法和视图*/  

    char* getString();

    int length();

private:

    char * m_string; //指向字符串首地址

    unsigned int m_size;  //字符串长度

 

};

void MyString::Zero()

{

 if(!m_string)

  return;

 delete m_string;

 m_string=0;//清零很重要

}

MyString::MyString()

{

 m_size=255;

 m_string=new char[255];

 *m_string='\0';

 cout<<"我是无参数构造函数"<<endl;

 cout<<"m_string的值是:"<<m_string<<endl;

}

MyString::~MyString()

{

 Zero();

 cout<<"析构函数运行了"<<endl;

}

MyString::MyString(const char* str)

{

 m_size=strlen(str)+1;

 m_string=new char[m_size];

 memcpy(m_string,str,m_size);

 cout<<"我是字符串构造函数"<<endl;

 cout<<"m_string的值是:"<<m_string<<endl;

}

MyString::MyString(MyString & str)

{

 m_size=str.m_size;

 m_string=new char[m_size];

 memcpy(m_string,str.m_string,m_size);

 cout<<"我是浅层拷贝"<<endl;

 cout<<"m_string的值是:"<<m_string<<endl;

}

MyString & MyString::operator=(const MyString & str)

{

 m_size=str.m_size;

 m_string=new char[m_size];

 memcpy(m_string,str.m_string,m_size);

 cout<<"我是对象赋值运算"<<endl;

 cout<<"m_string的值是:"<<m_string<<endl;

 return *this;

}

MyString & MyString::operator=(const char* c_str)

{

 m_size=strlen(c_str)+1;

 m_string=new char[m_size];

 memcpy(m_string,c_str,m_size);

 cout<<"我是字符串赋值运算"<<endl;

 cout<<"m_string的值是:"<<m_string<<endl;

 return *this;

}

char MyString::operator[](const unsigned int index)

{

 cout<<"我是取值运算"<<endl;

 if(index<m_size) return m_string[index];

 return '\0';

}

bool MyString::operator>(const MyString &str)

{

 cout<<"我是比较运算>"<<endl;

 if(*m_string>*(str.m_string))

  return 1;

 return 0;

}

char* MyString::getString()

{

 return m_string;

}

int MyString::length()

{

 return m_size;

}

MyString MyString::strcat(const MyString & str)

{

 char temp[255]={0};

 ::strcpy(temp,m_string);

 ::strcat(temp,str.m_string);

 MyString m_str(temp);

 return m_str;//这用的是匿名对象做为返回值,还有其它方法.你根据自己需要自己改.

}

int main(int argc, char* argv[])

{

/*这里是测试部分*/

 MyString str("I like C++");

 MyString strtest;

 strtest="You love girls";

 strtest>str? cout<<"真的很大"<<endl:cout<<"真的很小"<<endl;

 MyString three=strtest.strcat(str);//一个方法会引用多种方式\构造\挎贝\重写,自行研究.

 cout<<"three 是这样的:"<<three.getString()<<endl;

 cout<<"打印第一个字符:"<<strtest[2]<<endl;

/*这里是测试部分*/

 return 0;

}

//希望能对你有所帮助。



#include <iostream>
using namespace std;

class mystring
{
public:
mystring();
~mystring(){}
mystring(const char *str);
mystring(mystring &str);
mystring& operator =(const mystring& str);
mystring& operator =(const char *c_str);
char operator [](const unsigned int index);
mystring strcat (const mystring& str);
mystring strcat (const char *c_str);
mystring substring(int i,int j);//截取子链
mystring substring(int i);
bool operator >(const mystring& str);
bool operator >(const char *c_str);
bool operator >=(const mystring& str);
bool operator >=(const char *c_str);
bool operator <(const mystring& str);
bool operator <(const char *c_str);
bool operator <=(const mystring& str);
bool operator <=(const char *c_str);
mystring strcopy(mystring src);
mystring strcopy(char *str);
char *getstring();
int length();
void clear();
private:
char *m_string;
unsigned int m_size;
public:
friend ostream& operator <<(ostream& ostr,mystring& str)
{
ostr<<str.getstring();
return ostr;
}
friend istream& operator >>(istream& istr,mystring& str)
{
char temp[255];
istr>>temp;
str=temp;
return istr;
}
};

mystring::mystring()
{
m_string=NULL;
m_size=0;
}

mystring::mystring(const char *str)
{
int i=0;
char *strings;
m_size=0;
while (str[m_size]!='\0')
{
m_size++;
}
m_string=new char[m_size+1];
strings=m_string;
while(str[i]!='\0')
{
*strings=str[i];
strings++;
i++;
}
*strings='\0';
}

mystring::mystring(mystring &str)
{
char *strings,*strings1;
strings1=str.m_string;
m_size=str.m_size;
strings=new char[m_size];
m_string=strings;
while(*strings1!='\0')
{
*strings=*strings1;
strings1++;
strings++;
}
*strings='\0';
}

char *mystring::getstring()
{
return m_string;
}

int mystring::length()
{
return m_size;
}

void mystring::clear()
{
if( !m_string )
{
delete []m_string;
m_string = NULL;
}
m_size = 0;
}

mystring& mystring::operator =(const mystring& str)
{
int i=0;
char *strings;
clear();
m_size=str.m_size;
strings=new char[m_size];
m_string=strings;
while(str.m_string[i]!='\0')
{
*strings=str.m_string[i++];
strings++;
}
*strings='\0';
return *this;
}

mystring& mystring::operator =(const char *c_str)
{
int i=0;
char *mm_string;
cout<<c_str;
while (c_str[i]!='\0')
i++;
clear();
m_string=new char[i];
mm_string=m_string;
while (c_str[i]!='\0')
{
*mm_string=c_str[i];
i++;
mm_string++;
}
*mm_string='\0';
return *this;
}

char mystring::operator [](const unsigned int index)
{
return(m_string[index]);
}

mystring mystring::strcat (const mystring& str)
{
int i,j=0;
char *strings1,*strings2;
i=str.m_size+m_size;
strings1=new char[i+1];
strings2=strings1;
while (m_string[j]!='\0')
{
*strings1=m_string[j];
strings1++;
j++;
}
j=0;
while(str.m_string[j]!='\0')
{
*strings1=str.m_string[j];
strings1++;
j++;
}
*strings1='\0';
return mystring(strings2);
}

mystring mystring::strcat (const char *c_str)
{
int i=0,j=0;
char *strings1,*strings2;
while(c_str[i++]!='\0');
i+=m_size;
strings1=new char[i+1];
strings2=strings1;
while (m_string[j]!='\0')
{
*strings1=m_string[j];
strings1++;
j++;
}
j=0;
while(c_str[j]!='\0')
{
*strings1=c_str[j];
strings1++;
j++;
}
*strings1='\0';
return mystring(strings2);
}

mystring mystring::substring(int i,int j)
{
char *strings=new char[j];
int k=0;
while (k<=j-1)
strings[k++]=m_string[i];
strings[k]='\0';
return mystring(strings);
}

mystring mystring::substring(int i)
{
return substring(i,m_size-i+1);
}
bool mystring::operator >(const char *c_str)
{
unsigned int i=0;
bool flag;
while(m_string[i]!='\0'&&c_str[i]!='\0')
{
if (m_string[i]==c_str[i])
{
i++;
continue;
}
else if (m_string[i]>c_str[i])
{
flag=true;
break;
}
else
{
flag=false;
break;
}
}
if (i>=m_size) flag=false;
else flag=m_string[i]>c_str[i];
return flag;
}
bool mystring::operator >(const mystring& str)
{
mystring a(m_string);
return (a>str.m_string);
}

bool mystring::operator >=(const char *c_str)
{
unsigned int i=0;
bool flag;
while(m_string[i]!='\0'&&c_str[i]!='\0')
{
if (m_string[i]==c_str[i])
{
i++;
continue;
}
else if (m_string[i]>c_str[i])
{
flag=true;
break;
}
else
{
flag=false;
break;
}
}
if (m_string[i]=='\0'&&c_str[i]=='\0') flag=true;
else flag=m_string[i]>c_str[i];
return flag;
}

bool mystring::operator >=(const mystring& str)
{
mystring a(m_string);
return (a>=str.m_string);
}
bool mystring::operator <(const char *c_str)
{
mystring a(m_string);
return !(a>=c_str);
}

bool mystring::operator <(const mystring& str)
{
mystring a(m_string);
return !(a>=str.m_string);
}
bool mystring::operator <=(const mystring& str)
{
mystring a(m_string);
return !(a>str.m_string);
}
bool mystring::operator <=(const char *c_str)
{
mystring a(m_string);
return !(a>c_str);
}

mystring mystring::strcopy(char *str)
{
clear();
int i=0;
while (str[i]!='\0')
{
m_string[i]=str[i];
i++;
}
m_string[i]='\0';
m_size=i;
return *this;
}

mystring mystring::strcopy(mystring src)
{
clear();
int i=0;
while (src.m_string[i]!='\0')
{
m_string[i]=src.m_string[i];
i++;
}
m_string[i]='\0';
m_size=i;
return *this;
}
int main()
{
char asds[]="mmmm",bsd[]="mmmmmmmmm";

mystring a(asds);
mystring b(bsd);
a.strcopy(b);
cout<<a;
return 0;
}

you are so lucky!

这个要由高手来了

  • 19228869402 :c语言定义string是什么意思?
    曲钩园838 :答:结果就应该是输出了字符'a',同时string类型也可以直接加上另一个字符串,例如 string a = "abc", b = "bcd";a = a + b;cout << a << endl 结果应该输出字符串“abcbcd”而且string还支持直接比较两个字符串的大小(内置字典序比较方式)。C语言是一门面向过程的计算机编程语言,与C++、...
  • 19228869402 :C语言实现在一个字符串中查找指定的字符,并输出指定字符在字符串中出现...
    曲钩园838 :答:package com.string.to;import java.util.Arrays;import java.util.Scanner;public class JudeCount{ public static void main(String[]args){ System.out.println("请输入你要判断的字符串:");Scanner s=new Scanner(System.in);String str=s.nextLine();char[]ch=str.toCharArray();Arrays.sort(...
  • 19228869402 :c语言中如何将 int转化为string 类型
    曲钩园838 :答:可以使用以下方式:1、使用循环,把每一位数字转换成相应的字符,参考代码如下:include <stdio.h>#include <string.h>int main(){int num, n, i = 0;char str[20], tmp[20];scanf("%d", &num);n = num % 10;while (n>0){tmp[i++] = n + '0';num = (num - n) / 10;...
  • 19228869402 :C语言编写“有10个字符串,每个字符串表示一段文字,将10个字符串连接成...
    曲钩园838 :答:include<stdio。h>#include<string。h>intmain(){charres[10]tem[100],maxc;//res[10]用来存储最终结果 maxc是每个输入的字符串中的最大值 intn=10,i,leg,j=0;//leg是每个输入的字符串的长度 j用来当做res数组的下标while(n!=0){gets(tem);leg=strlen(tem);maxc=...
  • 19228869402 :在c语言中怎样定义字符串
    曲钩园838 :答:可以通过字符数组或字符指针来定义字符串,也可以用宏定义对常量字符串进行定义。下面通过举例来分别进行说明:char str1[] = "HelloWorld"; // 通过字符数组来定义字符串"HelloWorld",数组中每个存储单元存放一个字符char *str2 = "HelloWorld"; // 通过字符指针来定义字符串"HelloWorld",指针...
  • 19228869402 :如何用C语言实现删除字符串中某些特定的字符
    曲钩园838 :答:字符串其实是一个数组。你把后面的abcd依次移到***位置上。然后让字符串结束就好了。符串或串(string)是由零个或多个字符组成的有限序列。一般记为 s='a1a2???an'(n>=0)。它是编程语言中表示文本的数据类型。通常以串的整体作为操作对象,如:在串中查找某个子串、求取一个子串、在串的某个...
  • 19228869402 :C语言中有string吗?
    曲钩园838 :答:C语言中没有string类型。string类型是 C++、java、VB等编程语言中的。 在java、C#中,String类是不可变的,对String类的任何改变,都是返回一个新的String类对象。string 是C++标准程序库中的一个头文件,定义了C++标准中的字符串的基本模板类std::basic_string及相关的模板类实例。而在C语言中,C...
  • 19228869402 :求问c++中string类怎么用scanf读取
    曲钩园838 :答:String类可以用cin流式读取。在用scanf读取时,必须声明长度。不声明长度,直接scanf会出现运行时错误。include <stdio.h> include <string> using namespace std;int main(){ string a;a.resize(100); //需要预先分配空间 scanf("%s", &a[0]);puts(a.c_str());return 0;} ...
  • 19228869402 :c++怎么给一个string赋值
    曲钩园838 :答:include "stdafx.h"include include include"string" //操作字符串必须包含的头文件 using namespace std;void main(){ string s1 = "aaaaa";string s2("bbbbb");string s3 = s2; //通过拷贝构造函数,初始化s3 string s4(10, 'a');string s5 = "hello"+"world"; //错误 cout << "...
  • 19228869402 :用c语言实现字符串的回文,有要求如下:
    曲钩园838 :答://--- include <stdio.h> include <string.h> int is(char *str,size_t len) //判断长度为len的字符串str是不是回文 { int b=0,e=len-1;while (b<e){ if (str[b]==str[e]) { b++;e--;} else return 0;} return 1;} int main(void){ char s[80];scanf("%79s",...
  • 相关链接

    欢迎反馈与建议,请联系电邮
    2024 © 视觉网