C语言的查找

本文介绍了两种常见的数组查找算法:顺序查找和二分查找。顺序查找适用于无序数组,通过遍历数组来查找目标值,找到则返回下标,否则返回-1。二分查找适用于有序数组,通过不断将数组范围缩小一半来查找目标值,找到则返回下标,未找到返回-1。文章提供了两种算法的详细代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

顺序查找

猜数游戏

完整代码

二分查找

思路分析

二分查找方法的具体实现

二分查找的完整代码

顺序查找

猜数游戏

        从键盘中任意输入一个数,判断数列中是否包含该数【顺序查找】 要求: 如果找到了,就提示找到,并给出下标值, 找不到提示没有。

  • 首先对整个数组进行遍历,如果相等返回数组下标
//遍历
int i;
for (i = 0; i < arrLen; i++) {
	if (arr[i] == val) {
		return i;
	}
}
//如果在for循环中没有找到,则返回-1;
return -1;
  • main方法中,arrLen使用sizeof()方法可以得到,并且用index获取方法的返回值
int arr[] = { 23,1,34,88,100 };
int arrLen = sizeof(arr) / sizeof(int);
int index = seqSearch(arr, arrLen, 10);
if (index != -1) {
	printf("找到了,当前下标值为%d", index);
		
}
else {
	printf("没有找到该数据!");
}
getchar();

完整代码

//顺序查找
#include<stdio.h>

int seqSearch(int arr[], int arrLen, int val) {
	//遍历
	int i;
	for (i = 0; i < arrLen; i++) {
		if (arr[i] == val) {
			return i;
		}
	}
	//如果在for循环中没有找到,则返回-1;
	return -1;
}

void main() {

	int arr[] = { 23,1,34,88,100 };
	int arrLen = sizeof(arr) / sizeof(int);
	int index = seqSearch(arr, arrLen, 10);
	if (index != -1) {
		printf("找到了,当前下标值为%d", index);
		
	}
	else {
		printf("没有找到该数据!");
	}
	getchar();
}

二分查找

        请对一个有序数组进行二分查找 {1,8, 10, 89, 1000, 1234} ,
        输入一个数看看该数组是否存在此数,并且求出下标,如果没有就提示"没有这个数"。二分查找的前提是,该数组是一个有序数组

思路分析

  • 比如我们要查找的数是findVal
  • 如果midVal >  findVal 说明, 应该在midVal 的左边查找
  • 如果midVal <  findVal 说明, 应该在midVal 的右边查找
  • 如果midVal ==  findVal, 说明找到

二分查找方法的具体实现

  • 先找到数组中间这个数的下标,两者相加/2得到的是中间的位置,中间位置对应的就是数组的中间值
int midIndex = (leftIndex + rightIndex) / 2; 
int midVal = arr[midIndex];
  • 之后进行递归操作
//如果midVal >  findVal 说明, 应该在midVal 的左边查找
if(midVal > findVal) {
	binarySearch(arr, leftIndex, midIndex-1, findVal);//!!!
} else if(midVal < findVal){//如果midVal <  findVal 说明, 应该在midVal 的右边查找
	binarySearch(arr, midIndex+1, rightIndex, findVal);//!!!
} else {
	return midIndex; //返回该数的下标
}
  • 递归操作之后,如果左边的下标值大于右边的下标值,则说明这个数组都比较过,但还是没有找到
if( leftIndex > rightIndex) {
	return -1;//!!!!
}

二分查找的完整代码

//二分查找
#include<stdio.h>

//二分查找
int binarySearch(int arr[], int leftIndex, int rightIndex, int findVal) {
	
	
	//先找到数组中间这个数 midVal
	int midIndex = (leftIndex + rightIndex) / 2; 
	int midVal = arr[midIndex];
	//如果leftIndex > rightIndex, 说明这个数组都比较过,但是没有找到
	if( leftIndex > rightIndex) {
		return -1;//!!!!
	}
	//如果midVal >  findVal 说明, 应该在midVal 的左边查找
	if(midVal > findVal) {
		binarySearch(arr, leftIndex, midIndex-1, findVal);//!!!
	} else if(midVal < findVal){//如果midVal <  findVal 说明, 应该在midVal 的右边查找
		binarySearch(arr, midIndex+1, rightIndex, findVal);//!!!
	} else {
		return midIndex; //返回该数的下标
	}


}

void main() {

	int arr[] = { 1,8, 10, 89, 1000, 1234 };
	int arrLen = sizeof(arr) / sizeof(int);
	int index = binarySearch(arr, 0, arrLen - 1, 1000);
	if (index != -1) {
		printf("找到 index = %d", index);
	}
	else {
		printf("没有找到");
	}
	getchar();
}
### 回答1: 你可以使用C语言中的标准库函数fopen、fread、strstr和fclose来查找文件中的字符串。具体步骤如下: 1. 用fopen函数打开文件,返回一个文件指针。例如,下面的代码打开了名为"filename.txt"的文件,并返回一个指向该文件的指针。 ``` FILE *fp = fopen("filename.txt", "r"); ``` 2. 用fread函数读取文件中的内容,并将其存储到一个缓冲区中。例如,下面的代码读取文件中的前100个字符,并将它们存储到一个名为buffer的字符数组中。 ``` char buffer[100]; fread(buffer, sizeof(char), 100, fp); ``` 3. 用strstr函数在缓冲区中查找指定的字符串。例如,下面的代码在buffer中查找名为"string_to_find"的字符串,并返回一个指向该字符串的指针。 ``` char *found = strstr(buffer, "string_to_find"); ``` 4. 用fclose函数关闭文件。例如,下面的代码关闭了之前打开的文件。 ``` fclose(fp); ``` 你可以根据实际需求修改上面的代码,以便实现你要求的功能。 ### 回答2: 在C语言中,可以使用一些库函数来查找文件中的字符串。以下是一种常见的方法: 首先,需要打开文件并读取其内容。可以使用标准库函数`fopen`来打开文件,得到一个文件指针。然后使用`fscanf`或`fgets`等函数来读取文件中的内容。 接下来,可以使用字符串处理函数来查找文件中的字符串。可以使用`strstr`函数来在读取的字符串中查找特定的子字符串。该函数会返回第一次出现该子字符串的位置,如果没有找到,则返回`NULL`。 具体的查找操作可以使用循环来进行。每次读取一行文件内容,然后使用`strstr`函数查找目标字符串。如果找到了,则可以根据需要进行处理,如打印或保存该行。 在完成文件读取和字符串查找后,记得关闭文件以释放资源,使用`fclose`函数来关闭文件。 此外,还可以根据实际需求对程序进行扩展,如加入输入参数来指定文件名和目标字符串,或通过函数返回查找结果等。 综上所述,以上是使用C语言查找文件中字符串的一种常见方法。 ### 回答3: 在C语言中,要查找一个文件中的字符串可以通过以下步骤进行。 1. 打开文件:使用C语言的文件操作函数,如fopen()函数打开要查找的文件。如果文件成功打开,会返回一个文件指针。 2. 读取文件:使用C语言的文件读取函数,如fgets()函数逐行读取文件内容,或fread()函数一次性读取整个文件内容。 3. 查找字符串:对于读取的每一行或整个文件内容,可以使用C语言字符串处理函数如strstr()函数,在其中查找需要的字符串。strstr()函数用于在一个字符串中查找指定的子字符串,并返回第一次出现该子字符串的位置。 4. 处理查找结果:根据查找的返回结果,可以执行相应的操作。如果返回的位置不为NULL,则说明找到了字符串,并可以根据需要进行进一步处理。如果返回的位置为NULL,则说明没有找到字符串。 5. 关闭文件:使用C语言的文件操作函数,如fclose()函数关闭已经打开的文件,释放资源。 需要注意的是,文件操作过程中需要注意错误处理,例如要检查文件是否成功打开,读取内容是否成功等,以确保程序的稳定性和可靠性。此外,还需要注意文件路径和文件编码等相关问题,以确保程序能够正确访问和处理文件内容。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值