常用辅助函数集合

C语言字符串函数解析

1. strncpy源码

char *strncpy(char *dest, const char *src, size_t count)
{
    char *tmp = dest;
    while (count) {
        if ((*tmp = *src) != 0)
            src++;
        tmp++;
        count--;
    }
    return dest;
}

返回dest指针的目的是链式表达式

2. strlen源码

(1)

int myStrlen(const char *str)

{
    assert(str != NULL); 
    int len = 0; 
    while ((*str++) != '\0') len++; 
    return len; 
}
(2)不带变量,递归方式
int myStrlen(const char *str)
{
    assert(str != NULL); 
    return *str == '\0' ? 0 : (1+myStrlen(++str)); 
}

3. strcmp源码

int myStrcmp(const char *str1, const char *str2)
{
    assert(str1 != NULL && str2 != NULL); 
    int ret = 0; 
    while (!(ret=*(unsigned char *)str1 - *(unsigned char *)str2) && *str1)
    {
        str1++; 
        str2++; 
    }
    if (ret < 0) ret = -1; 
    else if (ret > 0) ret = 1; 
    return ret; 
}


4. strcat源码

char *myStrcat(char *strDest, const char *strSrc)
{
    char *address = strDest; 
    assert(strDest != NULL && strSrc != NULL); 
    while (*strDest) strDest++; 
    while (*strDest++ = *strSrc++) ; 
    return address; 
}

5. strcpy源码

char *strcpy(char *strDest, const char *strSrc)

    assert(strDest != NULL && strSrc != NULL); 
    char *address = strDest; 
    while ((*strDest++ = *strSrc++) != '\0') ; 
    return address; 
}

6. 



<think>好的,我需要帮助用户查找与NOI竞赛相关的常用函数集合。首先,用户的问题是关于NOI常用函数列表的汇总,他们可能在准备竞赛时需要这些资源来提高编程效率。根据用户提供的引用链接,我需要先检查这些引用中是否有相关信息。 查看引用[1],是关于量子力学和中小学信息学比赛的,可能不直接相关。引用[2]提到了NOI题库和题解,可能包含一些函数的使用示例。引用[3]和[4]涉及NOI Linux的使用和竞赛资料,但具体是否有函数列表还不确定。用户可能需要的是C++标准库中的常用函数,比如算法、数学处理、字符串操作等,这些在竞赛编程中非常常见。 接下来,我需要整理这些常用函数,确保覆盖主要方面。比如数学函数中的abs、sqrt、pow,字符串处理的substr、find,STL算法如sort、lower_bound等。此外,还要注意竞赛中的输入输出优化,这可能包括快读函数。引用[2]中的题解可能展示了这些函数的使用,但用户需要的是列表,所以应该分门别类列举,并给出示例和适用场景。 同时,用户可能希望了解这些函数在NOI竞赛中的实际应用,所以每个类别下可以简要说明用途。例如,排序函数在解题中的重要性,数学函数在处理几何或数论问题时的应用。此外,引用[3]提到的NOI Linux环境可能需要特别注意某些函数的兼容性或性能表现。 需要验证是否有引用资料直接提供了函数列表。如果引用中没有现成的列表,可能需要根据常见的NOI编程实践来汇总,并参考用户提供的引用作为辅助资料。比如,引用[4]提到博主是竞赛指导教师,可能其博客中有相关资料,但根据给出的链接描述,可能需要进一步查找。 最后,确保回答结构清晰,分点列出函数类别,每个函数给出简单示例,并提到相关的引用作为支持。例如,输入输出优化可以参考引用[2]中的题解案例,或者引用[3]中的NOI环境配置建议。同时,生成的相关问题应围绕如何应用这些函数、优化技巧以及竞赛中的常见错误展开。</think>关于NOI竞赛中常用的函数和编程技巧,以下是针对C++语言的汇总整理,涵盖算法、数学、字符串处理等核心领域: ### 一、数学计算类函数 1. **绝对值函数** `int abs(int x);` 示例:$|a-b|$ 可写为 `abs(a-b)` 2. **幂函数与开方** `double pow(double base, double exp);` `double sqrt(double x);` 示例:计算$x^3$写作`pow(x,3)`,$\sqrt{2}$写作`sqrt(2)` 3. **取整函数** `double ceil(double x);` // 向上取整 `double floor(double x);` // 向下取整 ### 二、字符串处理函数 1. **截取子串** `string substr(size_t pos = 0, size_t len = npos);` 示例:`s.substr(2,5)` 截取从第3字符开始的5个字符 2. **查找子串** `size_t find(const string& str, size_t pos = 0);` 返回首次出现位置,未找到返回`string::npos` ### 三、STL算法库关键函数 1. **快速排序** `sort(begin, end, cmp);` 示例:`sort(arr, arr+n);` 时间复杂度$O(n \log n)$[^2] 2. **二分查找** `lower_bound(begin, end, val);` 返回第一个≥val的迭代器,要求序列有序 3. **最大最小值** `max(a, b);` 与 `min(a, b);` 支持多参数版本`max({a,b,c})` ### 四、输入输出优化 ```cpp inline int read() { // 快读函数 int x=0,f=1; char c=getchar(); while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();} while(c>='0'&&c<='9')x=x*10+c-'0',c=getchar(); return x*f; } ``` (适用于大规模数据输入场景,参考NOI Linux环境优化[^3]) ### 五、其他实用技巧 1. **位运算宏定义** `#define lowbit(x) ((x)&(-x))` // 获取最低有效位 2. **容器清空优化** `vector<int>().swap(v);` // 彻底释放vector内存
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值