我的目标是创建一个方法,该方法返回调用它的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);
}
所以我只想知道这是否正常,或者我是否需要添加更多内容,以及如何修复未定义的变量?
答案 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_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;
}