gpt4 book ai didi

c++ - If 语句无法激活

转载 作者:行者123 更新时间:2023-11-30 05:22:26 27 4
gpt4 key购买 nike

我正在尝试创建一个应该执行以下操作的函数:

- 接受两个字符数组,一个比另一个小,并确定较小的字符数组是否是较大数组的子集。举个例子:数组 A:{"s","c","h","o","o","l"} ;数组 B:{"c","h"}。我有义务使用指针递增/递减操作。这是我生成的代码:

int locator(char *Bigptr, char *Smallptr) {
int count = 0;
for (; *Bigptr != '\0'; Bigptr++) {
if (*Smallptr == *Bigptr) {
for (; (*Smallptr == *Bigptr) != '\0'; Smallptr++, Bigptr++) {}
if (*Smallptr == '\0') {
return count;
}
else {
cout << "small is not the subset of big" << endl;
return 0;
}
}
count++;
}
return 0;

这就是我认为代码应该如何运行:

两个指向字符数组的指针被作为函数“locator”的参数。变量 count 是我放置的一个,目的是告诉我 A 中第一个字符的下标是什么(例如,“school”和“ch”将是元素 1,因此 A[1])。第一个 for 循环确保较大数组的第一个值是实际字符。 if 语句在找到一个公共(public)字符时返回 true。第二个 for 循环然后检查是否所有较小的数组都存在于较大的数组中。当我的程序编译时,所有这些都按预期工作。问题出现在嵌套的 if 语句中。事实上,如果较小的数组是较大数组的子集,我希望它是真的。为什么不是这样呢?以“学校”和“ch”为例。 *Smallptr 最初指向数组 B 的第一个元素(即“ch”),因此是“c”。然后将其与“学校”中的“c”进行比较。然后这两个指针递增,以便它们都指向各自数组中的“h”。同样,它们再次递增,因此 *Bigptr 指向“o”,*Smallptr 指向“\0”。不是这样吗?为什么函数总是输出else语句?

最佳答案

您对第二个 for 循环的理解不正确。

if (*Smallptr == *Bigptr) {
for (; (*Smallptr == *Bigptr) != '\0'; Smallptr++, Bigptr++) {}

由于您已经确定(在 if 条件语句中)*Smallptr == *Bigptr,该比较给出了一个非零值(true ) 结果。

测试 (*Smallptr == *Bigptr) != '\0' 将非零结果与值为零的 char 进行比较。非零值永远不会与零进行比较(至少,对于标准整数类型,包括 bool),因此循环无效。

符合你描述的循环是

for (; (*Smallptr == *Bigptr) && *SmallPtr != '\0'; Smallptr++, Bigptr++) {}

检查两个字符是否相等,并且都非零。

关于c++ - If 语句无法激活,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39682925/

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