【发布时间】:2019-09-22 05:30:37
【问题描述】:
我希望我的函数与我在 cstring / string.h 库中使用的函数“strchr”一样工作。
我知道我不能将“ const char* ”变量/数组转换为“ char* ”。然而,预定义的“strchr”函数如何能够同时传递“const char”和“char”数据类型数组并正常工作?我怎样才能改变我的,让它也能工作?
char* my_strchr(char *place_to_find, char what_to_find)
{
for(int i=0;place_to_find[i];i++)
if(what_to_find==place_to_find[i]) return place_to_find+i;
return NULL;
}
...
int main()
{
const char vocals1[]="AEIOUaeiou";
char vocals2[]="AEIOUaeiou";
cout<<strchr(vocals1,'e');
cout<<strchr(vocals2,'e');
cout<<my_strchr(vocals1,'e');
cout<<my_strchr(vocals2,'e');
return 0;
}
您可能已经知道,我的第三个cout<< 不起作用。
我正在寻找一种方法来改变我的功能(我猜第一个参数应该以某种方式进行类型转换)。
【问题讨论】:
-
如果您不编辑这些值,您应该接受并返回
const char*类型。然后当提供char*时,它将隐式转换为const char* -
从doc可以看出,有2个重载。 (并且你有几种方法来分解实现)。
-
正如 Kyle 所说,如果您的函数不打算修改值,则应始终使用 const char*。他们可以将 char* 传递给它。如果您的函数要修改该值,则不应应用 const 版本。
-
@KyleWillmon -- 你的评论是正确的,除了“隐式转换”应该是“隐式转换”。强制转换是您在源代码中编写的内容,用于告诉编译器进行转换。不存在隐式强制转换。
-
@PeteBecker 谢谢。我无法再编辑它,但我会在以后尝试使用正确的语言。我也意识到两个重载是一个更好的解决方案,因为在可变字符串的情况下,您可能希望使用返回的指针来改变字符串(所以当给定
char*时的返回应该是char*而不是比const char*)
标签: c++ string function parameters strchr