码图 149 完成String类(C++)

题目:

引入CString.h头文件,它的内容如下:
#include <iostream>
using namespace std;
class String{
private:
	char *mystr;    //字符串
	int len;    //字符串长度
public:
	String(){
		len =0;
		mystr =NULL;
	}
	String(const char* p){
		len = strlen(p);
		mystr = new char[len+1];
		strcpy(mystr,p);
	}
	String(String &s){
		len = s.len;
		if (len !=0)
		{
			mystr = new char[len+1];
			strcpy(mystr,s.mystr);
		}
	}
	~String(){
         if (mystr != NULL)
         {
			 delete []mystr;
			 mystr =NULL;
			 len = 0;
         }
	}

	char *GetStr(){return mystr;}
	void ShowStr(){cout<<mystr;}

        bool IsSubstring(const char *str);
	bool IsSubstring(const String &str);
	int str2num();
	void toUppercase();
};

实现String类的成员方法:
bool IsSubstring(const char *str) 判定字符串str是否为当前String对象的子串,是则返回true,否则返回false。
bool IsSubstring(const String &str) 判断String对象str是否为当前String对象的子串,是则返回true,否则返回false。
int str2num() 将当前String对象转化为数字,转换时忽略出数字以外的字符,
不考虑溢出的情况,如当前字符串为1t2e3s4y5,执行str2num 返回12345。

void toUppercase()将String的字符串的字母全部转化为大写字母。

代码:

#include <iostream>

#include <cstring>

using namespace std;

class String{

private:

    char *mystr;    //字符串

    int len;    //字符串长度

public:

    String(){

        len =0;

        mystr =NULL;

    }

    String(const char* p){

        len = (int)strlen(p);

        mystr = new char[len+1];

        strcpy(mystr,p);

    }

    String(String &s){

        len = s.len;

        if (len !=0)

        {

            mystr = new char[len+1];

            strcpy(mystr,s.mystr);

        }

    }

    ~String(){

         if (mystr != NULL)

         {

             delete []mystr;

             mystr =NULL;

             len = 0;

         }

    }

    char *GetStr(){return mystr;}

    void ShowStr(){cout<<mystr;}

    bool IsSubstring(const char *str);

    bool IsSubstring(const String &str);

    int str2num();

    void toUppercase();

};

void String::toUppercase(){

    int i=0;

    for(i=0;i<len;i++){

        if(mystr[i]>='a'&&mystr[i]<='z'){

            mystr[i]-=32;

        }

    }

}

bool String::IsSubstring(const char *str){

    bool flag=false;

    int i=0,j=0;

    while(mystr[i]){

        if(str[j]=='\0'){

            flag=true;

            break;

        }

        if(mystr[i]==str[j]){

            i++;

            j++;

        }

        else{

            i++;

            j=0;

        }

    }

    if(mystr[i]=='\0'&&str[j]=='\0'){

        return true;

    }

    return flag;

}

bool String::IsSubstring(const String &str){

    return IsSubstring(str.mystr);

}

int String::str2num(){

    int a[100],result=0;

    int i=0,j=0,k=0;

    for(i=0;i<len;i++){

        if(mystr[i]>='0'&&mystr[i]<='9'){

            a[j++]=mystr[i]-48;

        }

    }

    for(i=j-1;i>=0;i--){

        for(k=0;k<j-i-1;k++){

            a[i]*=10;

        }

        result+=a[i];

    }

    return result;

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值