字符串

strlen()

strtok( 字符串 ,  分隔符 )  //将字符串按分隔符切分,会修改原字符串

char *strtok(char *str, const char *delimiters);

// 第一次:传入要分割的字符串

// 后续:传入 NULL 继续分割

char str[] = "apple banana orange";
char *token;

// 第一次调用:传入要分割的字符串
token = strtok(str, " ");
printf("%s\n", token);  // apple

// 后续调用:传入 NULL 继续分割
while ((token = strtok(NULL, " ")) != NULL) {
    printf("%s\n", token);
}

<ctype.h>

islower(), tolower()

isupper(), toupper()

isalnum()  // 判断是否是数字或字母

isalpha()

isdigit()

// 内置函数

__builtin_popcount(x)  // 计算整数二进制表示中 1 的个数

int __builtin_popcount(unsigned int x);      // 32位整数
int __builtin_popcountl(unsigned long x);    // 长整数
int __builtin_popcountll(unsigned long long x); // 长长整数

__builtin_clz 注意x!=0

 GCC/Clang 的内置函数,统计前导零的个数(Count Leading Zeros)

sprintf()  // 将格式化的数据写入字符串(内存)

int sprintf(char *str, const char *format, ...);

#include <stdio.h>

int main() {
    char buffer[100];
    int age = 25;
    double height = 1.75;
    
    // 将多个数据格式化到 buffer
    sprintf(buffer, "年龄: %d, 身高: %.2f 米", age, height);
    
    printf("%s\n", buffer);  // 输出: 年龄: 25, 身高: 1.75 米
    
    return 0;
}

strstr()

char *strstr(const char *haystack, const char *needle);

找到:返回指向第一次出现位置的指针

没找到:返回 NULL

#include <stdio.h>
#include <string.h>

int main() {
    char str[] = "Hello World, Hello C";
    char *p;
    
    p = strstr(str, "World");
    if (p != NULL) {
        printf("找到位置: %s\n", p);     // 输出: World, Hello C
        printf("偏移量: %ld\n", p - str); // 输出: 6
    }
    
    p = strstr(str, "Java");
    if (p == NULL) {
        printf("没找到\n");
    }
    
    return 0;
}

atoi()  // 字符串转换成整数

int atoi(const char* str);

e.g.  atoi("100") --> 100

strcat  // 合并

char* strcat(char* dest, const char* src);

#include <stdio.h>
#include <string.h>

int main() {
    char dest[50] = "Hello";  // 必须足够大!
    char src[] = " World!";
    
    strcat(dest, src);
    printf("%s\n", dest);  // 输出: Hello World!
    
    return 0;
}

strcpy  // 将一个字符串复制到另一个字符串

char *strcpy(char *dest, const char *src);

strcmp

strncmp  // 前n个字符比较

int strncmp(const char *s1, const char *s2, size_t n);

hash

【define】

#include "uthash.h"  // 单头文件库

struct my_struct {
    int id;                    // key
    char name[20];            // value
    UT_hash_handle hh;        // 必须包含这个成员
} hashname;

【op】

HASH_FIND

HASH_ADD

HASH_FREE

快排

qsort

// 升序 int一维数组

int cmp(const void* _a, const void* _b){

    return *(int*)_a - *(int*)_b;

}

qsort(arr, n, sizeof(int), cmp);

// 二维数组,以第一个元素为准升序

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

    return (*(int**)a)[0] - (*(int**)b)[0];

}

qsort(arr, n, sizeof(int*), cmp);

// 结构体

typedef struct {
    int val;
    // 其他成员
} Node;

int cmp(const void *a, const void *b) {
    Node *pa = (Node*)a;      // 先转成 Node*
    Node *pb = (Node*)b;
    return pa->val - pb->val;  // 升序
}

二维数组

int** ans = malloc(sizeof(int*)*r);   // 二维数组,有r行一维数组

// [ [1,2,3], [1,2], [1] ]

*returnColumnSizes = malloc(sizeof(int) * r);  // int** returnColumnSizes --> 每行有几列

// [ [3,2,1] ]  ### *returnColumnSizes -->[3,2,1]  ### (*returnColumnSizes)[0] = 3

for(int i = 0; i<r; i++){

        ans[i] = malloc(sizeof(int)*c);

        for(int j = 0; j<c; j++){

            // set --> ans[i][j] = matrix[i*c+j];

        }

        (*returnColumnSizes)[i] = c;

}

*returnSize = r;

return ans;

内存

memcpy

void *memcpy(void *dest, const void *src, size_t n);

memset

memset(arr, -1, sizeof(int)*n);  // malloc

memset(arr, -1, sizeof(arr));  // int arr[n]

注意:memset针对字节,在c语言中如果想将数组全赋值为inf需要用for循环

int只能全部初始化为0,-1,或char类型

如果初始化为1会因为每次取一字节导致初始化每个int元素为0x01010101

malloc

calloc  // malloc + 初始化

realloc  // 更改原arr

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐