数组代码代码

本文介绍了C语言中处理数组和字符串的一些常见技巧,包括利用函数在数组中查找特定值、字符串连接、逆转字符串、将数组转换为字符串以及折半查找的方法。特别指出在函数中使用sizeof运算符需要注意的问题。

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

1.利用函数查找数组中某个值,找到了返回1,没有找到返回0;
return 0可以 终止 main() 函数,并返回值 0。

int Search_arr(int arr[], int length, int key) {//数组作为形参传入函数之后,会退化成一个指针。所以在函数中对指针进行sizeof,即对一个地址sizeof。在32位系统,因为8位 = 1字节,所以sizeof(地址) = 4。而在64位系统中则等于 8。所以必须增加一个表示数组长度的变量。
	for (int i = 0; i < length; i++) {
		if (arr[i] == key)
			return 1;
	}
	return 0;
}
int main() {
	int brr[] = { 1,2,3,4,5,6 };
	int result=Search_arr(brr, 6, 0);
	printf("%d",result);
	return 0;
}

2.字符串连接,找到字符串一的结尾,复制字符串2进入1尾部。一般不用scanf读取字符再连接。

#include<stdio.h>
/*int main() {
	char arr[10] = "abcd";
	char brr[] = "xyz";
	int i;
	int j;
	for (i = 0; arr[i] != '\0'; i++);
	for ( j = 0; brr[j] != '\0'; j++) {
		arr[i+j] = brr[j];
	}
	arr[i + j] = '\0';
	printf("%s", arr);
}
*/
void add_str(char arr[10],char brr[10]) {
	int i;
	int j;
	for (i = 0; arr[i] != '\0'; i++);
	for (j = 0; brr[j] != '\0'; j++) {
		arr[i + j] = brr[j];
	}
	arr[i + j] = '\0';
	printf("%s", arr);
}
int main() {
	char str1[100] = "HELLO";
	char str2[100] = "China";
	add_str(str1, str2);
}

3.逆转字符串

strlen函数在c语言中的用法是c语言库的一个函数,包含在[string.h]中。它用于计算字符串中的元素数,即从数组头开始计数,直到满足字符串结束符[\0],计数结果不包括[\0]

#include<stdio.h>;
#include<string.h>
void Reverse(char arr[]) {
	int len = strlen(arr);


	/*for (int i = 0, j = len - 1-i; i < j; i++) {           //这个函数是错误的
		int temp;
		temp = arr[i];
		arr[i] = arr[j];
		arr[j] = temp;
	}*/


	for (int i = 0, j = len - 1; i < j; i++, j--) {
		int temp;
		temp = arr[i];
		arr[i] = arr[j];
		arr[j] = temp;
	}
}
int main() {
	char a[] = "qwertyui";
	Reverse(a);
	printf("%s", a);
}

4数组转字符串 12345->“54321”->“12345”

#include<stdio.h>;
#include<string.h>
void Reverse(char arr[]) {
	int len= strlen(arr);
	for (int i = 0, j = len - 1; i < j; i++, j--) {
		int temp;
		temp = arr[i];
		arr[i] = arr[j];
		arr[j] = temp;
	}
}
void Change(char str[],int  n) {
	int i = 0;
	while (n != 0) {
		str[i++] = n % 10+'0';
		n /= 10;
	}
	str[i] = '\0';
	Reverse(str);
}
int main() {
	char str[100];
	Change(str, 12345);
	printf("%s", str);
}

5折半查找 。
形参是数组,不可以使用sizeof(arr) / sizeof(arr[0])。因为数组作为形参传入函数之后,会退化成一个指针。所以在函数中对指针进行sizeof,即对一个地址sizeof。在32位系统,因为8位 = 1字节,所以sizeof(地址) = 4。而在64位系统中则等于 8。
在函数中可以使用sizeof(arr) / sizeof(arr[0])。例如 binsearch(arr,sizeof(arr) / sizeof(arr[0]),1);

#include<stdio.h>
int binsearch(int arr[], int length, int key) { 
	int low = 0;
	int high = length - 1;   
	int mid;
	while (low <= high) {               //不可以忘记等于号
	 mid = (low + high) / 2;
		if (arr[mid] == key) 
			//printf("%d", mid+1);
			return mid+1;
		else if (arr[mid] > key)
			high = mid - 1;
		else  
			low = mid + 1;
	}
	return -1;
}
int main() {
	int arr[] = {1,3,5,7,10};
	printf("%d", binsearch(arr, 5, 1));
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值