【发布时间】:2017-06-11 08:19:05
【问题描述】:
好的,我的教授给我一个任务。这里是:
编写一个名为 strchr406 的函数。它传递了 2 个参数:一个字符串和一个字符 下面是函数的原型: 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;
}
}
我得到了奇怪的输出。任何帮助表示赞赏。
【问题讨论】:
-
不清楚你的问题是什么。
strchr是一个非常简单的函数。但是,您不能从函数中返回指针或整数,因为给定的赋值是无意义的(并且教导使用0作为空指针常量是不好的风格;使用NULL宏)。也许你的教授的意思是一个空指针,它和整数0不一样?但是你不能像字符串一样打印它,而是显式测试并打印不同的东西(这就是空指针的想法)。 -
不要发布文字图片。您至少应该将其粘贴为文本。
-
我现在编辑一下。
-
是的,我不确定他在这里问什么。我不知道“s+1”和“s+2”在这里是如何工作的。
-
发布的代码使用了一个头文件:
stringproblems.h,但该文件的内容没有发布。您希望我们猜测该文件的内容吗?