分享c语言中一些实用的函数

目录

一.atoi()函数

二.strlen()函数,strcmp()函数,strncpy()函数

1.strlen()函数

2.strncpy函数

3.strcmp()函数

三.memcpy()函数,memset()函数

1.memcpy()函数

2.memset()函数

四.qsort()函数


一.atoi()函数

atoi函数位于#include<stdlib.h>头文件中,atoi 代表 "ASCII to Integer"。它将一个以空字符('\0')结尾的字符串转换为一个整数

int atoi(str);

str为一个 C 风格的字符串,表示要转换为整数的数字。

返回值:返回转换后的整数值

这个函数通常是用来处理一些字符型的数字,然后使其转换为整型的数字。

注意是数字哦!

代码如下:

#include <stdio.h>
#include <stdlib.h>

int main() {
    const char *str1 = "1234";
    const char *str2 = "  -567";//当然负数也可以转换
    const char *str3 = "42abc";
    const char *str4 = "abc42";

    int num1 = atoi(str1);
    int num2 = atoi(str2);
    int num3 = atoi(str3);
    int num4 = atoi(str4);

    printf("String: '%s' -> Integer: %d\n", str1, num1);
    printf("String: '%s' -> Integer: %d\n", str2, num2);
    printf("String: '%s' -> Integer: %d\n", str3, num3);
    printf("String: '%s' -> Integer: %d\n", str4, num4);

    return 0;
}

结果如图:

二.strlen()函数,strcmp()函数,strncpy()函数

1.strlen()函数

strlen()函数通常用来求字符串长度。其位于<string.h> 头文件中。

strlen(arr);

arr为要求的字符串。

返回值:返回要求的字符串长度。

2.strncpy函数

strncpy 是 C 标准库中的一个函数,用于将一个字符串前 n 个字符复制另一个字符串中。它的定义位于 <string.h> 头文件中。

strncpy(dest, src,n);

  • dest: 目标字符串的指针。
  • src: 源字符串的指针。
  • n: 要复制的最大字符数。

返回值:返回dest

注意:复制完之后通常要在dest数组后面加上"/0"结束符

3.strcmp()函数

strcmp() 是 C 标准库中的一个函数,用于比较两个字符串。它的定义位于 <string.h> 头文件中。

strcmp(str1, str2);

str1和str2为 要比较的两个字符串

返回值:是一个整数,表示两个字符串的比较结果:

  • 返回 0:如果 str1str2 相等。
  • 返回负值:如果 str1 小于 str2
  • 返回正值:如果 str1 大于 str2

示例代码:

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
int main() {
	char num[10] = { "123" };//注意是char类型的,一共3个字符,分别是1 2 3,而不是单独一个123
	
	char num1[10] = { 0 };
	int a = strlen(num);//3,,注意istrlen 返回字符串的长度,不适用于整数数组。
	 strncpy(num1, num, a);//要注意strncpy 函数用于字符串操作,而不是整数数组,num1是被复制进去的数组,num是复制的数组,a为被复制的长度
	 num1[a] = '\0';//注意复制之后要在被复制的数组最后一个字符后面添加一个字符的结束符\0
	for (int i = 0; i < a ; i++) {
		printf("%c\n", num1[i]);
	}
	if (strcmp(num1, num) == 0) {
		printf("两个数组相等\n");
	}
	else {
		printf("两个数组不相等\n");
	}
	printf("%d", a);//3
	return 0;
}

结果如图:

注意:这三个函数只适用于字符型数组

三.memcpy()函数,memset()函数

1.memcpy()函数

memcpy() 是 C 标准库中的一个函数,用于从源内存位置复制指定数量字节目标内存位置。它的定义位于 <string.h> 头文件中

memcpy(dest, src, n);

  • dest: 指向目标内存区域的指针。
  • src: 指向源内存区域的指针。
  • n: 要复制的字节数。

返回值:返回 dest 

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
int main() {
	char a[50] = { "hello,world!" };
	char b[50] = { 0 };
	memcpy(b, a, strlen(a));//a复制内容的来源,b表示复制内容的目的地,strlen(a)表示复制的字节数。
	printf("%s", b);
	return 0;
}

结果如图:

2.memset()函数

memset() 是 C 标准库中的一个函数,用于将指定的值设置为指定内存区域中的每个字节。它的定义位于 <string.h> 头文件中。

memset(s,c,n);

  • s: 指向要设置的内存块的指针。
  • c: 要设置的值(转换为 unsigned char 类型)。
  • n: 要设置的字节数。

返回值:返回指向内存区域 s

比如说我们新设立了一个字符型数组,让其部分(也就是n,要设置的字节数)置为1:

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
int main() {
	char a[10] = {0};
	memset(a, 1, sizeof(a));
	for (int i = 0; i < 10; i++) {
		printf("%d ", a[i]);
	}
	return 0;

}

结果如下:

注意:

  • memset() 按字节操作,适用于字符数组或希望初始化为 0 的内存区域。
  • 对于非字符类型的初始化(例如整数数组),建议手动遍历数组并设置每个元素的值。

四.qsort()函数

qsort() 是 C 标准库中的一个函数,用于对数组进行快速排序。它的定义位于 <stdlib.h> 头文件中。

int compare(const void *a, const void *b) {

return (*(int *)a - *(int *)b);

}

void qsort(base,nmemb,size, compare);

  • base: 指向待排序数组的起始位置的指针。
  • nmemb: 数组中的元素数量。
  • size: 每个元素的大小(以字节为单位)。
  • compare: 指向比较函数的指针,该函数确定两个元素的相对顺序。(注意该函数一定要写哦)

返回值:无

用这个函数我们可以让我们的代码更加简短,而且该函数的时间复杂度通常为O(nlogn),很少有情况为O(n^2),所有排序中通常算最快的一种。

#define _CRT_SECURE_NO_WARNINGS 1
/*认识一下快排qsort()函数*/
#include<stdio.h>
/*const void* 是一种指向常量的通用指针类型。具体来说,它是一个指向 void 类型的常量指针。
void 类型表示不确定类型的指针,即它可以指向任何类型的数据。加上 const 之后,表示指针指
向的内容是常量,不可被修改。*/
int compare(const void* a, const void* b) {
	return (*(int*)a) - (*(int*)b);
	/*(int*)a:这是一个类型转换(Type Cast)。

a:这是一个 const void* 类型的指针,指向需要比较的元素。
(int*):这是一个类型转换操作符,将 const void* 指针 a 转换为 int* 类型的指针。这一步将通用指针 a 转换为可以指向整数的指针。
*(int*)a:这是解引用(Dereference)操作。

(int*)a:转换后的 a 是一个 int* 类型的指针,指向一个整数。
*:解引用操作符,它用于访问指针所指向的值。*(int*)a 获取指针 a 所指向的整数值。*/
}
   
int main() {
	int  num[] = { 2,8,5,6,7,3,9,1 };
	int n = sizeof(num) / sizeof(num[0]);
	qsort(num, n, sizeof(int), compare);
	for (int i = 0; i < n; i++) {
		printf("%d ", num[i]);
	}
	return 0;
}

当compare()函数返回的值为负时,说明a<b,

返回的值为正时,说明a>b,

返回的值为0时,说明a=b。

当然上面所说的方法是从小到大的方法,如果想要从大到小的话,把compare函数中的a和b换一下位置:

#define _CRT_SECURE_NO_WARNINGS 1

int compare(const void* a, const void* b) {
	return (*(int*)b) - (*(int*)a);
}
   
int main() {
	int  num[] = { 2,8,5,6,7,3,9,1 };
	int n = sizeof(num) / sizeof(num[0]);
	qsort(num, n, sizeof(int), compare);
	for (int i = 0; i < n; i++) {
		printf("%d ", num[i]);
	}
	return 0;
}

ps:

在 C 语言标准库中,qsort()唯一一个通用的排序函数。而在java中有Arrays.sort() 函数,Collections.sort() 函数,而且更简洁,直接在()中写入要排序的数组就可以了。

所以我就很推荐大家认识一下这个qsort()函数

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值