Leetcode 常用函数总结(C语言版本)

#include <stdio.h>
#include <stdbool.h>
#include <math.h>
#include <ctype.h>
#include <string.h>
#include <stdlib.h>
#include "uthash.h"
#define MAX(a, b) ((a) > (b) ? (a) : (b))
#define MIN(a, b) ((a) < (b) ? (a) : (b))
fmin(a, b) --- c语言库函数,返回两个浮点参数中的较小者
fmax(a, b) --- c语言库函数,返回两个浮点参数中的较大者
----------------------------------------------------------------------
strlen();字符串长度,不包含结束符
strcmp(str1, str2); str1与str2相同返回0
strncmp(str1, str2, n) 用来比较str1和str2字符串的前n个字符。如果两个字符串相等的话,strncmp将返回0。如果str1是str2的一个子串的话,str1小于str2。
strstr(str1, str2);该库函数包含在<string.h>头文件中意义为判断str2是否为str1的子串,若是则返回str2在str1中首次出现的指针位置,若不是返回NULL;
strchr(str, ch);功能就是找出在字符串str中第一次出现字符ch的位置,找到就返回该字符位置的指针,找不到就返回NULL
strset(str, ch);str字符串的所有字符替换为ch
strnset(str, ch, n); str字符串的前n个字符替换为ch
strcat(str1, str2); str2添加到str1的结尾
strncat(str1, str2,n); str2添加到str1的结尾,复制n个字符
strcpy(str1, str2); 把str2复制到str1
strncpy(str1, str2 + m, n); 从str2中第str[m]开始的n个字符复制到str1
strtok(str, delim);字符串str根据delim分割为多个子字符串
---------------------
char *token[col];
int i = 0;
/* 获取第一个子字符串 */
   token[0] = strtok(str, ",");
   
   /* 继续获取其他的子字符串 */
   while( token[i] != NULL ) {
      token[++i] = strtok(NULL, ",");
   }
----------------------------------------------------------------------
sprintf就是printf打印到str字符串中,返回值表示本次函数调用最终打印到字符缓冲区中的字符数目。
//将整数hh,mm,ss按指定格式组合后写入到字符串str中
sprintf(str,"%d:%d:%d",hh,mm,ss);
1、将数字转换为字符串形式:
char numstr[10] = {0};
sprintf(numstr, "%d", num); 
2、字符串转换成整数形式:
int numtemp = atoi(numstr);
----------------------------------------------------------------------
sscanf()返回值,成功则返回参数数目
//取指定长度(4个)的字符串到str
(1)sscanf("zhoue3456 ", "%4s", str);
//取到指定字符为止的字符串,取遇到空格为止字符串
(2)sscanf("zhou456 hedf", "%[^ ]", str);
//取仅包含指定字符集的字符串(只取数字和小写字符)
(3)sscanf("654321abcdedfABCDEF", "%[1-9a-z]", str);
//取需要的字符串 
(4)sscanf("2015.04.05", "%d.%d.%d", &a,&b,&c);
//取出&与$之间的字符串
(5)sscanf("abcd&hello$why", "%*[^&]&%[^$]", str );
//“what, time”仅保留time
(6)sscanf(“what, time”, "%*s%s", str );

注:
(*) 表示跳过此数据不读入
%[set]匹配输入字符串中所有在set字符集中的字符,遇见非set字符集的字符时即停止
%[^set]表示非
“.”为通配符,表示任何一个字符,例如:“a.c”可以匹配“anc”、“abc”、“acc”;
“|”或运算符,例如:a[n|bc|cb]c可以匹配“abcc”,“anc”,“acbc”;
----------------------------------------------------------------------
strcat_s(str1, sizeof(str1), str2); str2添加到str1的结尾
strncpy_s(str1, sizeof(str1), str2 + m, n); 从str2中第str[m]开始的n个字符复制到str1
memcpy_s(str1, sizeof(str1), str2, sizeof(str2)); str2复制到str1
strcpy_s(str1, sizeof(str1), str2, sizeof(str2)); 把str2复制到str1
sprintf_s(buffer, 200, " String: %s\n", s );
memset_s(void *dest, size_t destMax, int c, size_t count);
----------------------------------------------------------------------
*************************滑动窗口*************************
滑动窗口法,可以用来解决一些查找满足一定条件的连续区间的性质(长度等)的问题。往往类似于“请找到满足xx的最x的区间(子串、子数组)的xx”,
一般新建两个指针,初始化指向初始位置left = right = 0,索引闭区间[left, right]就是一个窗口,我们首先增加right指针扩大窗口,直到窗口中的字符串符合要求,之后,转而增加left指针缩小窗口,直到窗口中的字符串不符合要求,每次增加left都要更新一轮结果,然后重复此动作,直到right到达尽头。
滑动窗口就是双指针算法,只不过两个指针都先指向初始位置,还有的双指针是一个指向首地址,一个指向尾地址。
例:209. 长度最小的子数组(中等)
// 0、"子数组"问题使用滑动窗口。
// 1、满足什么条件,更新数据?------窗口内数据和大于target 。
// 2、更新什么数据?------最小子数组的长度,满足条件窗口的最小长度。
int minSubArrayLen(int s, int *nums, int numsSize) {
    if (numsSize == 0) {
        return 0;
    }
    int minlen =

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值