【发布时间】:2017-02-02 14:55:25
【问题描述】:
我正在尝试创建一个应该执行以下操作的函数:
- 取两个字符数组,一个比另一个小,并确定较小的字符数组是否是较大数组的子集。举个例子:
数组 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 语句在找到共同字符时返回 true。然后第二个 for 循环检查是否所有较小的数组都存在于较大的数组中。当我的程序编译时,所有这些都按预期工作。嵌套 if 语句出现问题。实际上,如果较小的数组是较大数组的子集,我希望它是正确的。为什么不是这样?以“school”和“ch”为例。 *Smallptr 最初指向数组 B 的第一个元素(即“ch”),因此是“c”。然后将其与“学校”中的“c”进行比较。然后这两个指针递增,以便它们都指向各自数组中的“h”。同样,它们再次递增,因此*Bigptr 指向“o”,*Smallptr 指向“\0”。不是这样吗?为什么函数总是输出else语句?
【问题讨论】:
-
您的参数是字符数组的数组,而不是字符数组。您需要提供一个完整的示例。
-
当我运行它时,它达到了返回计数,其中 count == 1。我可能通过传递正确的数据类型搞砸了。您对 A 和 B 的声明听起来是错误的。
标签: c++ arrays function c++11 char