- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
有没有办法做这样的事情?
int key=50;
int loop=5;
int array[10]={...};
int* Ptr=NULL;
qsort(array, 10, sizeof(int), compareints);
while(loop>0){
Ptr=(int*)bsearch(&key,array,10,sizeof(int),compareints);
if(Ptr!=NULL){
printf("found %d", *Ptr);
}else{
printf("did not find %d", *Ptr);
}
key++;
loop--;
}
问题是 key 增加了,但是 bsearch
仍然搜索数字 50。我猜是因为 bsearch
中的 key 参数是一个常量指针
。我知道如果所有键在搜索之前都存储在一个数组中,它就可以工作。但是,这不适合我的应用程序。任何帮助,将不胜感激。
最佳答案
转录评论 — 并添加演示代码。
您应该能够在循环的任何给定迭代中搜索任何键,因此您需要说明为什么您认为它仍在搜索 50...也许您需要显示数组的初始值设定项中有什么?会不会是您的 compareints()
函数运行异常?也许你也应该展示一下?您的“未找到”打印应该打印 key
而不是 *Ptr
。为了理智起见,两个 printf()
格式字符串都应该以 \n
结尾。
此代码有效 - 并且不会显着改变您问题中显示的逻辑:
#include <stdlib.h>
#include <stdio.h>
static
int compareints(const void *v1, const void *v2)
{
int i1 = *(int *)v1;
int i2 = *(int *)v2;
if (i1 < i2)
return -1;
else if (i1 > i2)
return +1;
else
return 0;
}
int main(void)
{
int key = 50;
int loop = 5;
int array[10] = { 57, 49, 50, 51, 53, 27, 60, 51, 19, 99 };
int *ptr = NULL;
for (int i = 0; i < 10; i++)
printf("%3d", array[i]);
putchar('\n');
qsort(array, 10, sizeof(int), compareints);
for (int i = 0; i < 10; i++)
printf("%3d", array[i]);
putchar('\n');
while (loop > 0)
{
printf("seeking key %d: ", key);
ptr = (int *)bsearch(&key, array, 10, sizeof(int), compareints);
if (ptr != NULL)
printf("found %d\n", *ptr);
else
printf("did not find %d\n", key);
key++;
loop--;
}
return 0;
}
示例输出:
57 49 50 51 53 27 60 51 19 99
19 27 49 50 51 51 53 57 60 99
seeking key 50: found 50
seeking key 51: found 51
seeking key 52: did not find 52
seeking key 53: found 53
seeking key 54: did not find 54
关于c - bsearch 在循环中更改键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18699142/
要么 cmp func 似乎工作;无法理解在 qsort_cmp 的情况下如何解析 int* 类型的 arg1。 据我所知:int* 被传递给 qsort_cmp,在那里它被更改为 void*,然后在
我有一个看起来像这样的结构: typedef struct dictionary_t{ char word[30]; int foo; int bar; } dictionar
我有一个struct employee比较器和main: #define MAX_SIZE 20 typedef struct Employee{ char name[MAX_SIZE];
我有一个按降序排序的数组,没有重复项。我可以使用 libc 中的 bsearch 函数对其执行二分搜索吗?为此,我是否需要更改传递给它的比较函数? 谢谢 最佳答案 是的,您可以使用bsearch。您需
我有一个结构: typedef struct entry_t { char * name; int lines [MAX]; int n;/*n lines*/ } entry_t; 和一
已修复。 包括 main() { int n; int i; char tempMonth[255]; //Used to store the month until chec
我在进行此搜索时遇到了问题。我非常确定我已经将问题与 bsearch 接受的字节数参数隔离开来。数据数组是一个拼字词典,我 100% 确定整个字典已加载到内存中,但是当我使用 bsearch 时尝试查
我有函数调用 userInteractive(*anangramInfo) ,它传入结构 anangramInfo 的指针,并且该结构包含指向实际字谜词的指针“anagramPointer”。所以,我
我正在尝试在预先排序的数组中查找用户输入的字符串。如果我编写自己的二分查找函数,输入就会被正确找到。如果我使用 C bsearch,我总是得到一个 NULL 指针。 这是相关的代码片段: printf
谁能告诉我为什么以下代码中的 bsearch() 在列表中找不到项目“getwidth”?我尝试了几个编译器,但它们都不适用,所以它一定是我的代码中的一个错误。但是,我真的看不出那里有什么问题。传递给
我正在努力在我的代码中执行 bsearch() 中的比较功能。显然,我想根据包含结构 (word_dict_t) 的字典数组上的键字符串(来自链表)进行二进制搜索 typedef struct {
有没有办法做这样的事情? int key=50; int loop=5; int array[10]={...}; int* Ptr=NULL; qsort(array, 10, sizeof(int
在 C 中使用 bsearch 未能在结构数组中找到字符串“Eva Lam”。此数组按字符串成员的降序排序。检查了很多次,还是不知道bug在哪里?顺便说一句,我正在使用 DEV C++ 5.9.4。请
bsearch 非常适合直接搜索,但是如果我需要例如搜索范围,我应该使用什么? 更新 例如,如果我想找到 a 和 b 之间的值范围 (a >= x < b)。 更新 范围值可以不相等。所以如果我有数组
我有以下程序: #include #include #include #include #include #define DICT_BUFSIZE 64 int compar(const v
我有一个未分类的字典文件,名为“dict.txt”。我已经设法将文件中的单词放入数组中,而且我使用的 qsort() 似乎也工作正常(也就是说,数组已排序)。 当我调用 bsearch() 时出现问题
我有一个指向整数的地址数组(这些整数升序排列)。它们具有重复值。例如:1,2、2、3、3、3、3、4、4…… 我正在尝试获取所有大于 a 的值一定的值(value)(关键)。目前正在尝试使用二进制来实
我有一个这样的数组: typedef struct INSTR { char* str; int argc; } INSTR; const static INSTR instruct
在 C(标准库)中使用 bsearch() 可以快速找到排序数组中的条目。 但是,如何计算插入新条目的位置(使用标准库)? bsearch() 专门检查找到的项目的键是否等于传递的键,如果不是,则返回
我在尝试对 C 中的字符串数组使用 c 内置 bsearch 时遇到一些令人困惑的行为。这是代码。我知道您可以使用内置的 strcmp 来搜索字符串数组,但我包含了 myStrCmp 用于调试目的,因
我是一名优秀的程序员,十分优秀!