Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/136.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何创建指向数组的指针并提供访问它的方法?_C++_Arrays_Oop_Pointers - Fatal编程技术网

C++ 如何创建指向数组的指针并提供访问它的方法?

C++ 如何创建指向数组的指针并提供访问它的方法?,c++,arrays,oop,pointers,C++,Arrays,Oop,Pointers,我必须创建两个类成员变量: a。指向字符数组的指针 b。弦长 创建成员函数以设置和获取所有字段 提供构造函数和析构函数 创建以下功能: a。从输入位置返回符号 b。将字符串转换为字符 子字符串的(+、+=、-、-=)重载操作 以下是我目前的代码: 字符串.h class String { private: char m_symbol_array{}; int m_string_length{}; public: String() { m_

我必须创建两个类成员变量:

a。指向字符数组的指针

b。弦长

  • 创建成员函数以设置和获取所有字段

  • 提供构造函数和析构函数

  • 创建以下功能:

    a。从输入位置返回符号

    b。将字符串转换为字符

  • 子字符串的(+、+=、-、-=)重载操作

  • 以下是我目前的代码:

    字符串.h

    class String
    {
    private:
        char m_symbol_array{};
        int m_string_length{};
    public:
        String()
        {
            m_symbol_array;
            m_string_length;
        }
        //String(char symbol_array, int string_length);
        //void setString(char symbol_array, int string_length);
        void setSymbol_array();
    
        int getSymbol_array(char symbol_array) { return m_symbol_array; }
        int getString_length(int string_length) { return m_string_length; }
    
        void string_to_char();
        int return_symbol();
    
        //String operator+();
        //String operator-();
    };
    
    String.cpp

    #include<iostream>
    //#include<string>
    //#include<cstring>
    #include"String.h"
    
    //String constructor
    
    //String::String(char symbol_array='d', int string_length = 0)
    //{
    //  setString(  symbol_array, string_length);
    //}
        //String member function
    //void String::setString(char symbol_array, int string_length)
    //{
    //  m_symbol_array = symbol_array;
    //  m_string_length = string_length;
    //}
    
    void String::setSymbol_array(char symbol_array)
    {
        m_symbol_array = symbol_array;
    }
    
    void String::string_to_char()
    {
        char* char_arr;
        cout << "Please, input the string ";
        string str_obj{};
        std::cin >> str_obj;
        //string str_obj("GeeksForGeeks");
        char_arr = &str_obj[0];
        cout << char_arr;
    
        //return 0;
    }
    
    //int String::return_symbol(){}
    
    //String String::operator+(){}
    
    //String String::operator-(){}
    
    #包括
    //#包括
    //#包括
    #包括“String.h”
    //字符串构造函数
    //字符串::字符串(字符符号\u数组=d',整数字符串\u长度=0)
    //{
    //设置字符串(符号数组、字符串长度);
    //}
    //字符串成员函数
    //无效字符串::设置字符串(字符符号数组,整数字符串长度)
    //{
    //m_symbol_数组=symbol_数组;
    //m_string_length=string_length;
    //}
    无效字符串::设置符号数组(字符符号数组)
    {
    m_symbol_数组=symbol_数组;
    }
    void String::String_to_char()
    {
    char*char_arr;
    cout>str_obj;
    //字符串str_obj(“geeksforgeks”);
    char_arr=&str_obj[0];
    
    cout让我们看一些东西。从您的include文件:

    private:
        char m_symbol_array{};
        int m_string_length{};
    
    两件事。首先,您需要一个指向字符数组的指针。因为您在编译时不知道长度,所以它应该是char*,而不是char,如下所示:

     char * m_symbol_array;
    
    接下来,让我们非常具体地改进初始化:

    private:
        char * m_symbol_array{nullptr};
        int m_string_length{0};
    

    这就是确保你的字符指针被正确初始化为<代码> null pTr> /Cuff>,它是“不指向任何地方”的C++变量,长度为0。 现在,让我们看看这个:

    String()
    {
        m_symbol_array;
        m_string_length;
    }
    
    构造函数中的这两行没有意义。请删除它们

    在这之后,它变得棘手。这几乎肯定不是你想要的,所以我正在更改签名:

    void String::setSymbol_array(const char * symbol_array)
    {
    }
    
    在C++中,一系列字符可以用三种方式之一来表示:

    std::string theBestWay;
    char * theSecondBestWay;
    char theWorstWay[10];
    
    BestWay是一个实现字符串的类。它是标准的一部分。在某种程度上,您的家庭作业是尝试编写std::string的版本

    但是你可以使用第二种方法——一个指向一系列字符的指针。你可以存储长度,这样当你处理它的时候,你就可以摆弄它了

    接下来要知道的是,当使用方法二或三时,你应该有一个字符,在0的末尾,不是“0”,而是零本身。这就是C和C++如何知道它已经到达字符串的结尾。 因此,我不打算编写代码,但我会更好地解释:

    void String::setSymbol_array(const char * symbol_array)
    {
         // if symbol_array == nullptr, then you should free
         // The allocated memory and set your m_ variable to nullptr;
    
         // Otherwise get the length of symbol_array (see strlen())
         // Then you can see if you already have enough space (plus one
         // for the 0-byte). If necessary, free the old memory and
         // allocate enough space, then use strcpy() to copy
         // the string.
    }
    

    我不打算为您编写它。我正在推动您朝着正确的方向前进。看看您能走多远。

    您的
    字符串实现有很多问题。它需要完全重新编写

    考虑到语法更正、对的处理等,请尝试以下类似的方法

    字符串.h

    class String
    {
    private:
        char m_symbol_array{};
        int m_string_length{};
    public:
        String()
        {
            m_symbol_array;
            m_string_length;
        }
        //String(char symbol_array, int string_length);
        //void setString(char symbol_array, int string_length);
        void setSymbol_array();
    
        int getSymbol_array(char symbol_array) { return m_symbol_array; }
        int getString_length(int string_length) { return m_string_length; }
    
        void string_to_char();
        int return_symbol();
    
        //String operator+();
        //String operator-();
    };
    
    类字符串
    {
    私人:
    char*m_symbol_数组=nullptr;
    int m_字符串长度=0;
    公众:
    字符串()=默认值;
    字符串(常量字符*符号数组);
    字符串(常量字符*符号数组,整数字符串长度);
    字符串(常量字符串和src);
    字符串(String&&src);
    ~String();
    字符串和运算符=(字符串rhs);
    void setString(常量字符*符号数组,整数字符串长度);
    char*getSymbol_数组(){return m_symbol_数组;}
    const char*getSymbol_数组()const{return m_symbol_数组;}
    int getString_length()常量{return m_string_length;}
    字符串和运算符+=(常量字符串和rhs);
    友元字符串运算符+(常量字符串和lhs、常量字符串和rhs);
    };
    
    String.cpp

    #include<iostream>
    //#include<string>
    //#include<cstring>
    #include"String.h"
    
    //String constructor
    
    //String::String(char symbol_array='d', int string_length = 0)
    //{
    //  setString(  symbol_array, string_length);
    //}
        //String member function
    //void String::setString(char symbol_array, int string_length)
    //{
    //  m_symbol_array = symbol_array;
    //  m_string_length = string_length;
    //}
    
    void String::setSymbol_array(char symbol_array)
    {
        m_symbol_array = symbol_array;
    }
    
    void String::string_to_char()
    {
        char* char_arr;
        cout << "Please, input the string ";
        string str_obj{};
        std::cin >> str_obj;
        //string str_obj("GeeksForGeeks");
        char_arr = &str_obj[0];
        cout << char_arr;
    
        //return 0;
    }
    
    //int String::return_symbol(){}
    
    //String String::operator+(){}
    
    //String String::operator-(){}
    
    #包括
    #包括“String.h”
    int str_长度(const char*str)
    {
    整数长度=0;
    如果(str){
    while(str[length]!='\0')++长度;
    }
    返回长度;
    }
    //字符串构造函数
    字符串::字符串(常量字符*符号数组)
    :字符串(符号数组,字符串长度(符号数组))
    {
    }
    字符串::字符串(常量字符*符号数组,整数字符串长度)
    :String()
    {
    设置字符串(符号数组、字符串长度);
    }
    字符串::字符串(常量字符串和src)
    :String(src.m_符号数组,src.m_字符串长度)
    {
    }
    String::String(String&&src)
    :m_符号数组(src.m_符号数组)、m_字符串长度(src.m_字符串长度)
    {
    src.m_symbol_array=nullptr;
    src.m_字符串长度=0;
    }
    //字符串析构函数
    字符串::~String()
    {
    删除[]m_符号_数组;
    }
    //字符串成员函数
    字符串和字符串:运算符=(字符串rhs)
    {
    /*
    交换(m_符号数组,rhs.m_符号数组);
    标准::交换(m_字符串长度,rhs.m_字符串长度);
    */
    char*old_symbol_array=m_symbol_array;
    int old_string_length=m_string_length;
    m_symbol_数组=rhs.m_symbol_数组;
    m_字符串长度=rhs.m_字符串长度;
    rhs.m_符号_数组=旧的_符号_数组;
    rhs.m_字符串长度=旧字符串长度;
    归还*这个;
    }
    无效字符串::设置字符串(常量字符*符号数组,整数字符串长度)
    {
    char*new_symbol_array=new char[string_length+1];
    对于(int i=0;i