gpt4 book ai didi

c++ - 如何从char *函数返回指针

转载 作者:行者123 更新时间:2023-12-03 06:58:42 24 4
gpt4 key购买 nike

我正在做由教授分配的练习。问题是:
编写函数myStrChr()。该函数具有两个参数:指向C样式字符串中第一个字符的const char * s和char c。返回指向c出现在s内的第一个外观的指针,如果c没有出现在s内,则返回nullptr(0)。
我一直在尝试,但仍然无法弄清楚如何解决该错误:“从const char *到char *的无效转换”或“从char *到const char *的无效转换
请让我解决。

char* mystrChr(const char *s, char c)
{
size_t len{};
for (size_t i = 0; s[i] != '\0'; i++)
len++;

char *p = s;
for (size_t i = 0; i < len; i++)
{
if (s[i] == c)
p = &s[i];
else
p = nullptr;
}
return p;

}

最佳答案

如注释中所述,您需要在整个函数中始终使用const char*,或者,如果需要返回(非常量)char*,则需要在返回之前显式淘汰常量。
但是您的代码中还有其他问题!最严重的是,您的第二个for循环在找到匹配项时不会停止:您应在找到字符后立即返回字符的地址。
其次(但不太严重),您实际上不需要两个循环-您可以简单地合并两个循环,或者返回指向找到的字符的指针,或者,如果循环在没有找到匹配的情况下结束,则返回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字符作为c参数(实际上是 std::strchr function,则要返回字符串的“结束标记”的地址),则可以通过在循环之后修改return语句:
const char* mystrChr(const char* s, char c)
{
while (*s) {
if (*s == c) return s;
++s;
}
return (c == '\0') ? s : nullptr;
}

关于c++ - 如何从char *函数返回指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64638127/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com