问题描述
我正在做由教授分配的练习。问题是: 编写函数myStrChr()。该函数具有两个参数:指向C样式字符串中第一个字符的const char * s和char c。返回指向c出现在s中的第一个外观的指针,如果c不出现在s中,则返回nullptr(0)。
我一直在尝试,但仍然无法找出解决错误的方法:“从const char *到char *的无效转换”或“从char *到const char *的无效转换” 请让我修理。
merge
解决方法
如注释中所述,您需要在整个函数中始终使用 const char*
,或者,如果需要 ,则返回{ )char*
,那么您需要在返回之前显式消除常量。
但是您的代码中还有其他问题!最严重的是,第二个for
循环在找到匹配项时不会停止:您应尽快找到字符的地址。
第二(但不那么严重),您实际上不需要两个循环-您可以简单地合并两个循环,然后返回指向找到的字符的指针,或者,如果循环结束而没有找到匹配项,则返回{{1} }。
以下是该功能的简化版本:
nullptr
如果要求您的函数返回非常量const char* mystrChr(const char* s,char c)
{
while (*s) { // Shorthand way of writing "while (*s != '\0')"
if (*s == c) return s; // Found a match,so return current pointer!
++s;
}
return nullptr; // No match found - return signal null pointer
}
指针,则可以在返回之前进行显式强制转换:
char*
编辑:如果如注释中所述,如果要传递char* mystrChr(const char* s,char c)
{
while (*s) {
if (*s == c) return const_cast<char*>(s); // Cast away the constness
++s;
}
return nullptr; // The cast is not required when using nullptr
}
字符作为nul
参数,则您想返回字符串的“结束标记”的地址(实际上,std::strchr
function可以),您可以通过在循环后修改c
语句来做到这一点:
return