gpt4 book ai didi

c - 如何使用指针在 c 中编写自己的 strchr?

转载 作者:太空宇宙 更新时间:2023-11-04 00:20:18 25 4
gpt4 key购买 nike

好的,我的教授给我布置了一个作业。在这里:


编写一个名为strchr406 的函数。它传递了 2 个参数:一个字符串和一个字符这是该函数的原型(prototype):char *strchr406(char str[], char ch);该函数应返回指向 str 中 ch 的第一个实例的指针。例如:

char s[ ] = "abcbc";
strchr406(s, 'b'); // returns s + 1 (i.e., a pointer to the first 'b' in s)
strchr406(s, 'c'); // returns s + 2
strchr406(s, 'd'); // returns 0

他要求我们使用指针编写我们自己的 strchr 版本。我在网上查找资源,但没有一个与他要求我们做的相符。我正在和一群其他学生一起工作,但我们都无法弄清楚这一点。

我们如何返回“s + 1”?

到目前为止,我有这个:(如果这样更容易,我也会把它放在网上:https://repl.it/FVK8)

#include <stdio.h>
#include "string_problems.h"

int main() {
char s[ ] = "abcbc";
strchr406(s, 'b'); // returns s + 1 (i.e., a pointer to the first 'b' in s)
strchr406(s, 'c'); // returns s + 2
strchr406(s, 'd'); // returns 0
printf("this should return %s\n", strchr406(s, 'c'));
return 0;
}

char *strchr406(char str[], char ch) {
char *p = str;
int index = 0;
while (*str != ch) {
++str;
++index;
}
if (*str == ch) {
return p + index;
} else {
return 0;
}

}

我得到了奇怪的输出。任何帮助表示赞赏。

最佳答案

来自手册:

  • char *strchr(const char *s, int c); --> 第二个参数是一个 int
  • strchr() 和 strrchr() 函数返回指向匹配字符的指针,如果未找到该字符,则返回 NULL。
  • 终止空字节被认为是字符串的一部分, 因此,如果将 c 指定为“\0”,这些函数将返回一个指向终止符的指针。
  • [如果第一个参数恰好为 NULL,则没有定义的行为]

char *strchr42(char *str, int ch)
{
for (;; str++) {
if (*str == ch) return str;
if (!*str) return NULL;
}
return NULL;
}

或更短:


char *strchr42a(char *str, int ch)
{
do {
if (*str == ch) return str;
} while (*str++) ;
return NULL;
}

关于c - 如何使用指针在 c 中编写自己的 strchr?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41863674/

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