c语言str系列函数

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()将小写字母转换为大写字母

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值