C語言常用函數匯總


C ( C99 & C11 )

文中的部分函數與頭文件只有 C99 & C11 及更高標准中才能使用, 因此若編譯器支持的 C 語言標准過低 ( 如 vc 6.0, turbo - C 等只支持 C89 標准 ) 請更換能支持更高標准的編譯器 (dev-cpp, visual studio 13及更高版本, gcc, clang等)

字符串處理函數

fgets和fputs

因為 gets 不安全, 所以在一些編譯器中 gets 無法使用. 於是用 fgets 和 fputs 代替

fgets的函數原型 :

char *__cdecl fgets(char *_Buffer, int _MaxCount, FILE *_Stream)

函數參數從左至右依次是 : 指向字符數組的指針, 用來存儲字符串. 字符串的最大長度, 輸入/輸出流

fputs的函數原型 :

int __cdecl fputs(const char *_Buffer, FILE *_Stream)

函數參數從左至右依次是 : 指向字符數組的指針, 輸入/輸出流

#include <stdio.h>

int main(void)
{
    char ch[40];

    fgets(ch, 40, stdin);		/*輸入Hello, World!*/
    fputs(ch, stdout);			/*輸出Hello, World!, 並在字符串末尾帶上換行符*/

    return 0;
}

輸出結果

Hello, World!
    

scanf 與 fgets :

  1. fgets 與 scanf 最大的不同就在於 scanf 遇到空白符 (如空格回車等) 就會停止讀取字符. 而 fgets 不會, 它遇到換行符或者已達讀取字符數量數量上限時才會停止讀取.
  2. 如果fgets讀取的字符數量超過上限, 則超過上限的字符會被保留在緩沖區中
  3. fgets 會讀取換行符 '\n', 因此這就是為什么 fgets 讀取的字符數量要少 1 個.


下面是一些常用的 C 語言中有關字符串操作相關的函數, 大部分包含於頭文件 <string.h> 中.

strlen()

函數原型 :

size_t strlen(const char *_Str)

顧名思義, 用來返回字符串長度的. 函數參數是 指向字符數組的指針

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

int main(void)
{
    char ch[40];

    fgets(ch, 40, stdin);		/*輸入Hello, World!*/
    printf("%d\n", strlen(ch));

    return 0;
}

輸出結果

14

strlen 返回的由 fgets 輸入的字符串的字符數時, 一般情況下比實際字符數要多 1, 因為 strlen 會將換行符也讀取進去.

strcat()

函數原型 :

char * strcat(char *_Destination, const char *_Source)

用於拼接字符串, 即將原字符串插入目標字符串的后面. 函數參數從左到右依次是 : 指向目標字符數組的指針, 指向原字符數組的指針. 返回類型是一個 char 指針*.

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

int main(void)
{
    char ch[40];
    char CH[40];

    scanf("%s", ch);	/*輸入Hello, */
    scanf("%s", CH);	/*輸入World!*/

    strcat(ch, CH);

    printf("%s", ch);

    return 0;
}

輸出結果

Hello, World!

strcmp

函數原型 :

int strcmp(const char *_Str1, const char *_Str2)

顧名思義用於比較字符串的長短或者查看兩個字符串是否相等. 其原理是將字符串的字符一一比較 ascii 值大小得到的.

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

int main(void)
{
    char A[40] = "Hello, World!";
    char B[40] = "hello, world!";
    char C[40] = "Hello, World";

    printf("%d\n", strcmp(A, B));
    printf("%d\n", strcmp(A, C));
    printf("%d\n", strcmp(A, A));

    return 0;
}

輸出結果

-1
1
0

一般來說如果返回值為正, 則字符串一 \(>\) 字符串二, 等於 1 則說明兩個字符串相等, 為負則說明字符串一 \(<\) 字符串二

strcpy()

函數原型 :

char * strcpy(char *_Destination, const char *_Source)

顧名思義用於復制字符串, 將原字符串覆蓋目標字符串. 函數參數從左至右依次是 指向目標字符數組的指針, 指向原字符數組的指針.

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

int main(void)
{
    char ch[40] = "Hello, World!";
    char CH[40] = "World!";

    strcpy(ch, CH);

    printf("%s\n", ch);

    return 0;
}

輸出結果

World!

或者是覆蓋某一部分, 不用全覆蓋

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

int main(void)
{
    char ch[40] = "Hello, World!";
    char CH[40] = "World!";

    strcpy(ch + 3, CH);

    printf("%s\n", ch);

    return 0;
}

輸出結果

HelWorld!


內存管理函數

C語言中最常用的就是 malloc 和 free 函數了, 這兩個函數包含於頭文件 <malloc.h> 或者 <stdlib.h> 中.

malloc()和free()

函數原型 :

void * malloc(size_t _Size)

malloc 向內存申請一塊空間, 大小為 _Size, 並返回一個指向該空間的地址. 指針類型和內存大小由程序員自行定義.

#include <stdio.h>
#include <stdlib.h>

typedef struct LinkNode
{
    int data;
    struct LinkNode *next;
} LinkNode;

int main(void)
{
    LinkNode *List = (LinkNode *)malloc(sizeof(LinkNode));

    List->data = 1;
    List->next = (LinkNode *)malloc(sizeof(LinkNode));

    return 0;
}

free()函數用於釋放內存, 只需向函數傳遞已經通過 malloc 分配空間的指針即可.

函數原型 :

void free(void *_Block)


數學函數

C語言中提供了許多數學函數, 它們大多包含在頭文件 <math.h>

fabs()

函數原型 :

double fabs(double _X)

常用於對 double 類型的變量取絕對值, 返回值的類型為 double.

#include <stdio.h>
#include <math.h>

int main(void)
{
    double x = -3.14159;

    printf("%lf\n", abs(x));

    return 0;
}

輸出結果

3.141590

floor()和ceil

floor()

函數原型 :

double floor(double _X)

用來對 double 變量向下取整

#include <stdio.h>
#include <math.h>

int main(void)
{
    double x = 3.14159;

    printf("%lf\n", floor(x));

    return 0;
}

輸出結果

3.000000

ceil()

函數原型 :

#include <stdio.h>
#include <math.h>

int main(void)
{
    double x = 3.14159;

    printf("%lf\n", ceil(x));

    return 0;
}

用來對 double 變量向上取整

輸出結果

4.000000

pow()

函數原型 :

double pow(double _X, double _Y)

用來求 double 變量的冪, 函數參數從左至右依次為 : 底數, 指數

#include <stdio.h>
#include <math.h>

int main(void)
{
    double x = 3.14159;

    printf("%lf\n", pow(x, 3));

    return 0;
}

輸出結果

31.006198

sqrt()

函數原型 :

double sqrt(double _X)

用於求 double 變量的平方根

#include <stdio.h>
#include <math.h>

int main(void)
{
    double x = 4.00;

    printf("%lf\n", sqrt(x));

    return 0;
}

輸出結果

2.000000

cbert()

函數原型 :

double cbrt(double _X)

用來求 double 變量的立方根

#include <stdio.h>
#include <math.h>

int main(void)
{
    double x = 27.00;

    printf("%lf\n", cbrt(x));

    return 0;
}

輸出結果

3.000000

log()

函數原型 :

double __cdecl log(double _X)

用於求 double 變量以自然對數為底的對數

#include <stdio.h>
#include <math.h>

int main(void)
{

    printf("%lf\n", log(1));

    return 0;
}

輸出結果

0.000000

log10()

函數原型 :

double __cdecl log10(double _X)

用於求 double 變量的以10為底的對數

#include <stdio.h>
#include <math.h>

int main(void)
{

    printf("%lf\n", log10(10));

    return 0;
}

輸出結果

1.000000

exp()

函數原型 :

double exp(double _X)

用來求以e為底的冪

#include <stdio.h>
#include <math.h>

int main(void)
{

    printf("%lf\n", exp(1));

    return 0;
}

輸出結果

2.718282

sin()和asin()

sin()

函數原型 :

double sin(double _X)

用於計算正弦值

#include <stdio.h>
#include <math.h>

int main(void)
{

    printf("%lf", sin(1.5707963));		/*1.5707963 即 π/2*/

    return 0;
}

輸出結果

1.000000

asin()

函數原型 :

double asin(double _X)

用於計算反正弦值

#include <stdio.h>
#include <math.h>

int main(void)
{

    printf("%lf", asin(1));

    return 0;
}

輸出結果

1.570796

cos()和acos()

cos()

函數原型 :

double cos(double _X)

用於計算余弦值

#include <stdio.h>
#include <math.h>

int main(void)
{

    printf("%lf", cos(1));

    return 0;
}

輸出結果

0.540302

acos()

函數原型 :

double __cdecl acos(double _X)

用於計算反余弦值

#include <stdio.h>
#include <math.h>

int main(void)
{

    printf("%lf", acos(0.5));

    return 0;
}

輸出結果

1.047198

tan()和atan()

tan()

函數原型 :

double __cdecl tan(double _X)

用於計算正切值

#include <stdio.h>
#include <math.h>

int main(void)
{

    printf("%lf", tan(3.1415926 / 3));

    return 0;
}

輸出結果

1.732051

atan()

函數原型 :

double __cdecl atan(double _X)

用於計算反正切值

#include <stdio.h>
#include <math.h>

int main(void)
{

    printf("%lf", atan(3.1415926));

    return 0;
}

輸出結果

1.262627

round()

函數原型 :

double round(double _X)

用於對浮點數進行四舍五入

#include <stdio.h>
#include <math.h>

int main(void)
{

    printf("%lf", round(4.5));

    return 0;
}

輸出結果

5.000000


其他函數

stdlib.h

atof()

函數原型 :

double atof(const char *_String)

主要用於將字符串中的數字轉化為為 double 浮點值, 讀取時遇到空白符會跳過, 遇到非數字字符會直接結束轉換

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    char A[10] = "1.2345";
    char B[10] = " 1.2345";
    char C[10] = "1.23a45";

    printf("%lf\n", atof(A));
    printf("%lf\n", atof(B));
    printf("%lf\n", atof(C));

    return 0;
}

輸出結果

1.234500
1.234500
1.230000

atoi

函數原型 :

int __cdecl atoi(const char *_String)

主要用於將字符串中的數字轉化為 int 值, 讀取時遇到空白符會跳過, 遇到非數字字符會直接結束轉換

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    char A[10] = "1234";
    char B[10] = " 1234";
    char C[10] = "1.23a4";

    printf("%d\n", atoi(A));
    printf("%d\n", atoi(B));
    printf("%d\n", atoi(C));

    return 0;
}

輸出結果

1234
1234
1

atol()

函數原型 :

long __cdecl atol(const char *_String)

主要用於將字符串中的數字轉化為 long 值, 讀取遇到空白符會跳過, 遇到非數字字符會直接結束轉換

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    char A[10] = "1234";
    char B[10] = " 1234";
    char C[10] = "1.23a4";

    printf("%ld\n", atol(A));
    printf("%ld\n", atol(B));
    printf("%ld\n", atol(C));

    return 0;
}

輸出結果

1234
1234
1

rand()

函數原型 :

int rand(void)

顧名思義, 它主要用來輸出隨機數的, 大多配合循環或遞歸使用

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    for (int i = 0; i < 5; i++)
    {
        int x = rand();
        printf("%d\n", x);
    }

    return 0;
}

輸出結果

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    for (int i = 0; i < 5; i++)
    {
        int x = rand();
        printf("%d\n", x);
    }

    return 0;
}

abs()

函數原型 :

long long abs(const long long _X)

主要用來求整數的絕對值, 返回類型和函數參數類型都為 long long.

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    printf("%ld\n", abs(-12345));

    return 0;
}

輸出結果

12345


ctype.h

判斷字符串中的字符函數

函數 描述
isalnum() 是否為字母數字
isalpha() 是否為字母
islower() 是否為小寫字母
isupper() 是否為大寫字母
isdigit() 是否為數字
isxdigit() 是否為16進制數字
iscntrl() 是否為控制字符
isgraph() 是否為圖形字符(例如,空格、控制字符都不是)
isspace() 是否為空格字符(包括制表符、回車符、換行符等)
isblank() 是否為空白字符([C99]/[C11]新增)(包括水平制表符)
isprint() 是否為可打印字符
ispunct() 是否為標點
tolower() 轉換為小寫
toupper() 轉換為大寫

stdbool.h

宏名稱 展開
bool _Bool
true 整數常量1
false 整數常量0
__bool_true_false_are_defined 整數常量1


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM