C語言中的字符串處理庫函數介紹與實現


一、介紹

本文將主要介紹字符串處理庫函數中的strlen、strcpy、strcat、strcmp、atoi等,主要由<string.h>頭文件提供。

 

二、strlen函數:求字符串的長度

strlen

頭文件

#include<string.h>

原型

size_t strlen(const char *s)

說明

求出s指向的字符串的長度(不包括null字符)。

返回值

返回s指向的字符串的長度。

size_t strlen(const char *s)
{
    size_t len = 0;
    while(*s++)
        len++;
    return len;
}

 

 

二、strcpy和strncpy函數:復制字符串

strcpy

頭文件

#include<string.h>

原型

char *strcpy(char *s1,const char *s2);

說明

s2指向的字符串復制到s1指向的數組中。若s1s2指向的內存空間重疊,則作未定義處理。

返回值

返回s1的值。

strncpy

頭文件

#include<string.h>

原型

char *strncpy(char *s1,const char *s2,size_t n);

說明

s2指向的字符串復制到s1指向的數組中。若s2的長度大於等於n,則復制到第n個字符為止。否則用null字符填充剩余部分。若s1s2指向的內存空間重疊,則作未定義處理。

返回值

返回s1的值。

char *strcpy(char *s1,const char *s2)
{
    char *tmp = s1;
    while(*s1++ = *s2++)
        ;
    return tmp;
}

char *strncpy(char *s1,const char *s2,size_t n)
{
    char *tmp = s1;
    while(n){
        if(!(*s1++ = *s2++)) break;  //遇到'\0'就結束循環
        n--; 
    }
    while(n--)
    *s1++ = '\0';  //用'\0'填充剩余部分
    return tmp; 
}

 

 

三、strcat和strncat函數:連接字符串

strcat

頭文件

#include<string.h>

原型

char *strcat(char *s1,const char *s2)

說明

s2指向的字符串連接到s1指向的末尾。若s1s2指向的內存空間重疊,則作未定義處理

返回值

返回s1的值。

strncat

頭文件

#include<string.h>

原型

char *strncat(char *s1,const char *s2,size_t n);

說明

s2指向的字符串連接到s1指向的數組末尾。若s2的長度大於n則截斷超出部分。若s1s2指向的內存空間重疊,則作未定義處理。

返回值

返回s1的值。

char *strcat(char *s1,const char *s2)
{
    char *tmp = s1;
    while(*s1)
        s1++;  //前進到s1的末尾處 
    while(*s1++ = *s2++)
        ;  //循環復制直至遇到s2中的'\0' 
    return tmp;
}

char *strncat(char *s1,const char *s2,size_t n)
{
    char *tmp = s1;
    while(*s1)
        s1++;  //前進到s1的末尾處 
    while(n--)
        if(!(*s1++ = *s2++)) break;  //遇到'\0'就結束循環 
    *s1 = '\0';  //在s1的末尾插入'\0' 
    return tmp; 
}

 

 

四、strcmp和strncmp函數:比較字符串的大小關系

strcmp

頭文件

#include<string.h>

原型

char *strcmp(char *s1,const char *s2)

說明

比較s1指向的字符串和s2指向的字符串的大小關系。

返回值

s1s2相等,則返回0;若s1大於s2,則返回正整數值,反之返回負整數值。

strncmp

頭文件

#include<string.h>

原型

char *strncat(char *s1,const char *s2,size_t n);

說明

比較s1指向的字符的數組和s2指向的字符的數組的前n個字符的大小關系。

返回值

s1s2相等,則返回0;若s1大於s2,則返回正整數值,反之返回負整數值。

int *strcmp(char *s1,const char *s2)
{
    while(*s1 == *s2){
        if(*s1 == '\0')
            return 0;
        s1++;
        s2++;
    }
    return (unsigned char)*s1 - (unsigned char)*s2;
}

int *strncmp(char *s1,const char *s2,size_t n)
{
    while(n && *s1 && *s2){
        if(*s1 != *s2)
            return (unsigned char)*s1 - (unsigned char)*s2;
        s1++;
        s2++;
        n--;
    }
    if(!n) return 0;  //相等 
    if(*s1) return 1;  //s1 > s2
    
    return -1;    //s1 < s2
}

 

 

五、atoi、atol和atof函數:轉換字符串

atoi

頭文件

#include<stdlib.h>

原型

int atoi(const char *nptr)

說明

nptr指向的字符串轉換為int型表示

返回值

返回轉換后的值。結果值不能用int型表示時的處理未定義。

atol

頭文件

#include<stdlib.h>

原型

long atol(const char *nptr)

說明

nptr指向的字符串轉換為long型表示

返回值

返回轉換后的值。結果值不能用long型表示時的處理未定義。

atof

頭文件

#include<stdlib.h>

原型

double atof(const char *nptr)

說明

nptr指向的字符串轉換為double型表示

返回值

返回轉換后的值。結果值不能用double型表示時的處理未定義。

//使用atoi函數的例子

#include<stdio.h>
#include<stdlib.h>
int main(void)
{
    char str[128];
    printf("請輸入字符串:");
    scanf("%s",str);
    
    printf("轉換為整數后為%d。\n",atoi(str));
    return 0;
 } 

 


免責聲明!

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



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