将通过函数传递的const char *文本直接转换为chars向量

时间:2016-09-08 05:06:53

标签: c++ arrays char type-conversion

想象一下MyTextClass是一个自定义类,在这种情况下会将传递的const char "Hello stackoverflowers"保存到std::vector<char>中:

class MyTextClass{
    private:
        std::vector<char> storage;
    public:
        MyTextClass(const char* _passedchars) //constructor
}

使用类似上面代码的内容,我想通过向其传递文本来初始化MyTextClass的实例:

MyTextClass textholder("Hello stackoverflowers");

如果我在= {/ p>}中重载MyTextClass运算符,甚至可以执行以下操作:

MyTextClass textholder = "Hello stackoverflowers";

问题变得弄清楚MyTextClass构造函数的定义应该是什么样子。我这样说是因为虽然接收const char的构造函数没有问题直接作为"Hello stackoverflowers"之类的文本传递,但这是一个数组,因此它的长度是:

1)不能提前设计(因为它是未知长度的传递文本);

2)也没有在构造函数中找到(因为sizeof(_passedchars)/sizeof(_passedchars[0])只会评估指针的大小;

3)并且未使用std::size或使用std::beginstd::end检索,因为const char没有实现。{/ p>

如果没有这些信息,我就无法弄清楚如何将const char构造函数的_passedchars参数MyTextClass转换为内部std::vector<char>我在上面的代码示例中调用了storage

因此,在想要创建自己的char文本类的情况下,如何将传递的const char转换为函数内的std:vector<char>

2 个答案:

答案 0 :(得分:1)

您可以使用strlen来确定C风格字符串的长度。

或者,您可以将参数类型更改为std::string,并使用其sizelength函数来获取字符串的长度。

答案 1 :(得分:0)

要使用这个确切的构造函数声明,您可以编写(在标题的类定义中):

GrandParent

(注意:MyTextClass(const char* _passedchars) : storage( _passedchars, _passedchars + strlen(_passedchars) ) { } 需要#include <string.h>。)

但是字符串文字实际上是一个数组。通过接受指针,您丢失了已有的长度信息。所以你可以把构造函数改为:

strlen

在后一种情况下,您可以使用template<size_t N> MyTextClass( const char (&passed)[N] ) : storage( passed, passed + N - 1 ) { } 代替。