C++实现String类

C++实现String类

@(C++代码)[C++实现, 学习笔记]

String.h

#ifndef String_h
#define String_h

#include <iostream>
#include <cstring>

using namespace std;

//类的构建
class String
{
    friend ostream& operator<<(ostream& out,String& s);
    friend istream& operator>>(istream& in ,String& s);
public:
    String(const char* c=NULL);
    String(const String &s);
    String operator+(const String &s);
    String operator=(const String &s);
    bool operator==(const String &s);
    char operator[](int index);
    ~String(void){delete[] str;}
    size_t size(){return strlen(str);}

//private:
    char* str;
};

//功能的实现
inline String::String(const char* c)
{
    if(!c)
    {
        str = NULL;
    }
    else
    {
        str = new char[strlen(c)+1];
        strcpy(str,c);
    }
}

inline String::String(const String &s)
{
    if(!s.str)
    {
        str = NULL;
    }
    else
    {
        str = new char[strlen(s.str)+1];
        strcpy(str,s.str);
    }
}

inline String String::operator=(const String &s)
{
    if(this!=&s)
    {
        delete[] str;
        if(!s.str)
        {
            str = NULL;
        }
        else
        {
            str = new char[strlen(s.str)+1];
            strcpy(str,s.str);
        }
    }
    return *this;
}

inline String String::operator+(const String &s)
{
    String newStr;
    if(!s.str)
    {
        newStr = *this;
    }
    else if(!str)
    {
        newStr = s;
    }
    else
    {
        newStr.str = new char[ strlen(str) + strlen(s.str) + 1];
        strcpy(newStr.str , str);
        strcat(newStr.str , s.str);
    }
    return newStr;
}

inline bool String::operator==(const String &s)
{
    if(strlen(str) != strlen(s.str))
        return false;

    if(strcmp(str,s.str)==0)
        return true;
    else
        return false;
}

inline char String::operator[](int index)
{
    return str[index];
}

ostream& operator<<(ostream& out, String &s)
{
    out << s.str;
    return out;
}

istream& operator>>(istream& in , String& s)
{
    char tmp[255];
    s = "";
    do
    {
        in.get(tmp, 255);
        s = s + tmp;
    }while(tmp[0]!=0);
    return in;
}

#endif /* String_h */
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C++中的string类是一个用于处理字符串的标准库类。它提供了一系列成员函数和操作符重载,使得字符串的操作更加方便和高效。 C++中的string类位于命名空间std中,因此在使用之前需要包含头文件< string >。 下面是一个简单的示例,展示了如何使用string类来创建、初始化和操作字符串: ```cpp #include <iostream> #include <string> int main() { // 创建一个空字符串 std::string str; // 初始化字符串 std::string greeting = "Hello, world!"; // 获取字符串长度 int length = greeting.length(); std::cout << "Length: " << length << std::endl; // 连接字符串 std::string name = "Alice"; std::string message = greeting + " My name is " + name; std::cout << "Message: " << message << std::endl; // 获取子串 std::string substring = message.substr(7, 5); std::cout << "Substring: " << substring << std::endl; // 查找子串 size_t position = message.find("world"); if (position != std::string::npos) { std::cout << "Found at position: " << position << std::endl; } else { std::cout << "Not found" << std::endl; } return 0; } ``` 上述示例中,我们首先创建了一个空字符串`str`,然后使用赋值运算符将字符串"Hello, world!"赋给了变量`greeting`。接着,我们使用`length()`函数获取了字符串的长度,并使用`+`运算符将多个字符串连接起来形成新的字符串。我们还使用`substr()`函数获取了字符串的子串,并使用`find()`函数查找了子串在原字符串中的位置。 除了上述示例中的操作,string类还提供了许多其他有用的成员函数和操作符重载,如插入、删除、替换、比较等。你可以参考C++的官方文档或其他相关资料来了解更多关于string类的详细信息。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值