坚持使用字符串类的实现

时间:2013-07-07 03:13:51

标签: c++

我的目标是创建一个方法,该方法返回调用它的String的第i个元素(从零开始,就像数组一样)。如果要求的位置超出字符串范围,则此方法应打印出错误消息并返回空字符(\ 0)。

char String::element(int i) const
{
    if (i < m_str1) 
    {
        cout << s[i]; // also the s here is undefined
    }
    else 
    {
        cout << "Error" << endl;
    }
    return (0);
}

所以我只想知道这是否正常,或者我是否需要添加更多内容,以及如何修复未定义的变量?

1 个答案:

答案 0 :(得分:1)

为了使其正常工作,您需要将s更改为指向字符数组的成员变量。您没有提供String的类定义,因此很难说该成员变量的名称是什么。

您还应该更改

char String::element(int i) const

char String::element(size_t i) const

char String::element(unsigned int i) const

这是因为永远不应使用负索引值访问您的字符数组。如果不将i更改为无符号值,则需要确保它等于或大于零,这绝不应该被允许。玩具还应该m_str1更改为size_tunsigned int,如果它已经不是,因为字符串永远不会有负长度。

应用这些建议会使Stringelement()看起来像以下内容......

class String
{
    unsigned int m_str1; // length of character string
    char* m_str; // pointer to the character string
public:
    char String::element(unsigned int i) const;
};

char String::element(unsigned int i) const
{
    if (i < m_str1) 
    {
        return m_str[i]; // Changed s to m_str
    }

    cout << "Error" << endl;
    return 0;
}