C++ 如何创建指向数组的指针并提供访问它的方法?
我必须创建两个类成员变量: a。指向字符数组的指针 b。弦长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_
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