-5

我的目标是创建一个方法,该方法返回调用它的 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);
}

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

4

1 回答 1

1

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

你也应该改变

char String::element(int i) const

要么

char String::element(size_t i) const

或者

char String::element(unsigned int i) const

这是因为您的字符数组永远不应该使用负索引值访问。如果您不更改i为无符号值,则需要确保它等于或大于零,无论如何都不应该允许这样做。Toy 也应该更改m_str1为,size_t或者unsigned int如果它已经不是,因为字符串不应该有负长度。

应用这些建议将使看起来类似于以下内容String...element()

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;
}
于 2013-07-07T03:20:07.567 回答