1,qsort()
功能: 快速排序,其时间复杂度为n*log(n)
头文件: <stdlib.h>
声明:
void qsort(void *base, size_t nitems, size_t size, int (*compar)(const void *, const void*))
参数:
base – 指向要排序的数组的第一个元素的指针。
nitems – 由 base 指向的数组中元素的个数。
size – 数组中每个元素的大小,以字节为单位。
compar – 用来比较两个元素的函数。
实例:
#include <stdio.h>
#include <stdlib.h>
int cmpfunc (const void * a, const void * b)
{
return ( *(int*)a - *(int*)b );
}
int main(int argc, const char *argv[])
{
int arr[] = { 88, 56, 100, 2, 25 };
int arr_size = sizeof(arr)/sizeof(arr[0]);
qsort(arr, arr_size, sizeof(int), cmpfunc);
for(int i = 0 ; i < arr_size; i++ ) {
printf("%d ", arr[i]);
}
return 0;
}
PS:二分查找:
int search(int* nums, int numsSize, int target){
int left = 0;
int right = numsSize - 1;
while (left <= right) {
int mid = left + (right - left) / 2;
if ( target > nums[mid]) {
left = mid + 1;
} else if (target < nums[mid]) {
right = mid - 1;
} else {
return mid;
}
}
return -1;
}
2,str系列函数
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
char *str1;
char *str2 = "Hello";
char *str3 = "World";
/*
1,strcpy(dest,src)
此函数原型为 char *strcpy(char* dest, const char *src)
功能为拷贝字符串内容到目的串,把src所指向的内容拷贝到dest
*/
str1 = (char *)calloc(1,sizeof(char));
strcpy(str1,str2);
printf("%s\n",str1); // Hello
/*
2,strcmp(str1,str2)
此函数的函数原型为 int strcmp(const char *str1, const char *str2).
功能为比较两个字符串。
当str1指向的字符串大于str2指向的字符串时,返回正数。
当str1指向的字符串等于str2指向的字符串时,返回0。
当str1指向的字符串小于str2指向的字符串时,返回负数。
*/
if(strcmp(str1,str2)==0){
printf("String1 equal to String2 !\n");
}
/*
3,strlen(str)
此函数原型为unsigned in strlen(const char *str)
功能为返回字符串str的长度(不包括'\0')。
*/
printf("%lu\n",strlen(str1)); //5
/*
4,strcat(dest,src)
此函数原型为 char *strcat(char *dest, const char *src).
功能为连接两个字符串,把src连接到dest后面;返回dest地址
*/
strcat(str1,str3);
printf("%s\n",str1); //HelloWorld
/*
5、strstr()
函数原型为char *strstr(const char str1, const char *str2)
功能为查找字符串str2在str1中是否出现,找到则返回str1从找到位置开始之后的字符串,否则返回NULL。
*/
char *res = strstr(str1,"llo");
if(!res) {
printf("s2 is not in s1!\n");
} else {
printf("s2 appear in s1 in pos: %s\n",res); //lloworld
}
/*
6,strchr() strrchr()
char *strchr(char *str, char c)
功能为返回str中首次出现c的位置之后的字符串,如果str中不含c返回NULL
char *strrchr(char *str, char c)
功能为返回str中最后一次出现c的位置之后的字符串,如果str中不含c返回NULL
*/
printf("%s\n",strchr(str1,'o')); //oWorld
printf("%s\n",strrchr(str1,'o')); //orld
/*
7、strcspn() strspn()
strcspn
原型:size_t strcspn(const char *pstr, const char *strCharset)
在字符串pstr中搜寻strCharsret所包含字符在pstr中第一次出现的位置
strspn
原型size_t strspn(const char *pstr, const char *strCharset)
功能:返回pstr字符串中第一个不在后者出现的下标。
*/
unsigned long n = strcspn(str1,"World");
printf("char in s2 first appear in s1 is %c; pos in s1 is %lu\n",str1[n],n);// l,2
printf("%lu\n",strspn(str1,"HelloKitty")); //5
/*
8、strtoul
原型为unsigned long strtoul(const char *nptr,char **endptr,int base);
将参数nptr字符串根据参数base来转换成无符号的长整型数,endstr 为第一个不能转换的字符的指针。
*/
char *arg = "1234a5";
char *endstr=NULL;
if(strtoul(arg, &endstr, 10) > 65535 || !endstr || '\0' != *endstr){
printf("wrong endstr: %s!\n", endstr); // a5
} else {
printf("%lu is uint16!\n", strtoul(arg, &endstr, 10));
}
/*
9、strdup()
此函数原型为char *strdup(const char *str)
功能为拷贝字符串到新建的内存,返回内存指针。若失败,返回NULL。要注意,返回的指针指向的内存在堆中,所以要手动释放。
*/
/*
10、strtok
函数原型为char *strtok(char s[], const char *delim);
功能为分解字符串为一组字符串。s为要分解的字符串,delim为分隔符字符串。
在第一次调用时,strtok()必需给予参数s字符串,往后的调用则将参数s设置成NULL。
每次调用成功则将delim替换为‘\0’,返回指向被分割出片段的指针。
*/
char str[] = "Jack,Kimi,Lily,Lucy";
//对str_new进行strtok操作,防止str被更改
char *str_new = strdup(str);
//arr用来保存结果
char **arr =(char **)calloc(1,sizeof(char *));
int i = 0;
char *temp = strtok(str_new,",");
while(temp)
{
arr[i] = (char *)calloc(1, sizeof(char));
strcpy(arr[i], temp);
temp = strtok(NULL,",");
i++;
}
for(int j = 0; j < i; j++){
printf("arr[%d]:%s\n", j, arr[j]);
}
free(arr);
free(str_new);
return 0;
}
3, isalpha()
功能: isalpha()用来检测一个字符是否是字母。在默认情况下,字母包括:
a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z.
要检测的字符可以是一个有效的字符(被转换为 int 类型),也可以是 EOF(表示无效的字符),如果是字符,则返回1, 否则返回0 。
头文件:<ctype.h>
与此类似的函数有:
isdigit()判断一个字符是否是十进制数字
isalnum()判断一个字符是否是字母或数字
islower()判断一个字符是否是小写字母
isupper()判断一个字符是否是大写字母
tolower()将大写字母转换为小写字母
toupper()将小写字母转换为大写字母