欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C語(yǔ)言詳細(xì)講解常用字符串處理函數(shù)

 更新時(shí)間:2022年05月05日 10:19:31   作者:嵌入式宇宙  
在日常編程中,對(duì)于字符串的操作中我們都很習(xí)慣的使用一些C庫(kù)中自帶的函數(shù),并且關(guān)于字符串的操作函數(shù)基本都在 string.h 這個(gè)頭文件中。關(guān)于C庫(kù)字符串常用處理函數(shù)也是平時(shí)面試或者考試過(guò)程中非常喜歡考的,本文將帶大家手動(dòng)來(lái)實(shí)現(xiàn)這些常用函數(shù)

一、strlen()

1. 函數(shù)原型:

size_t strlen(const char *str)

參數(shù)str: 要計(jì)算的字符串的長(zhǎng)度
返回值: 返回字符串 str 的長(zhǎng)度,直到遇到結(jié)束字符'\0',但不包括結(jié)束字符。
size_t 是一個(gè)無(wú)符號(hào)整數(shù)類型。

2. 手動(dòng)實(shí)現(xiàn):

源代碼:

#include <stdio.h>
#include <string.h>
size_t my_strlen(const char *str)
{
    size_t len = 0;
    while (*str++ != '\0') {
        len++;
    }
    return len;
}
int main()
{
    char *p = "hello world";
    int len_1 = 0, len_2 = 0;

    len_1 = my_strlen(p);
    len_2 = strlen(p);
    printf("len_1 = %d, len_2 = %d\n", len_1, len_2);
    return 0;
}

運(yùn)行結(jié)果:

len_1 = 11, len_2 = 11

二、strcat()

1. 函數(shù)原型:

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

參數(shù)1: 目標(biāo)字符串,該空間需要足夠容納后續(xù)追加的字符串。
參數(shù)2: 要追加的字符串。
返回值: 返回指向目標(biāo)字符串的指針。

2. 手動(dòng)實(shí)現(xiàn):

源代碼:

#include <stdio.h>
#include <string.h>
char *my_strcat(char *dest, const char *src)
{
    while (*dest != '\0') {
        dest++;
    }
    while (*src != '\0') {
        *dest++ = *src++;
    }
    *dest = '\0';
    return dest;
}
int main()
{
    char p1[20] = "hello ";
    char p2[20] = "hello ";
    char *q = "world";
    my_strcat(p1, q);
    strcat(p2, q);
    printf("p1 = %s, p2 = %s\n", p1, p2);
    return 0;
}

運(yùn)行結(jié)果:

p1 = hello world, p2 = hello world

三、strcpy()

1. 函數(shù)原型:

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

參數(shù)1: 要存儲(chǔ)的目標(biāo)字符串。
參數(shù)2: 要復(fù)制的字符串。
返回值: 返回指向目標(biāo)字符串的指針。

2. 手動(dòng)實(shí)現(xiàn):

源代碼:

#include <stdio.h>
#include <string.h>
char *my_strcpy(char *dest, const char *src)
{
    while (*src != '\0') {
        *dest++ = *src++;
    }
    *dest = '\0';
    return dest;
}
int main()
{
    char p1[20] = {'\0'};
    char p2[20] = {'\0'};
    char *q = "hello world";
    my_strcpy(p1, q);
    strcpy(p2, q);
    printf("p1 = %s, p2 = %s\n", p1, p2);
    return 0;
}

運(yùn)行結(jié)果:

p1 = hello world, p2 = hello world

四、strcmp()

1. 函數(shù)原型:

int strcmp(const char *str1, const char *str2)

參數(shù)1: 要比較的第一個(gè)字符串
參數(shù)2: 要比較的第二個(gè)字符串
返回值:
    如果返回值 < 0,則表示 str1 小于 str2。
    如果返回值 > 0,則表示 str1 大于 str2。
    如果返回值 = 0,則表示 str1 等于 str2。

2. 手動(dòng)實(shí)現(xiàn):

源代碼:

#include <stdio.h>
#include <string.h>
int my_strcmp(const char *str1, const char *str2)
{
    int ret = 0;
    while ((*str1 != '\0') && (*str1 == *str2)) {
        str1++;
        str2++;
    }
    ret = *str1 - *str2;
    return ret;
}
int main()
{
    char p1[20] = {"hello world"};
    char p2[20] = {"hello aorld"};
    int ret_1, ret_2;
    ret_1 = my_strcmp(p2, p1);
    ret_2 = strcmp(p2, p1);
    printf("ret_1 = %d, ret_2 = %d\n", ret_1, ret_2);
    return 0;
}

運(yùn)行結(jié)果:

ret_1 = -22, ret_2 = -22

五、memset()

1. 函數(shù)原型:

void *memset(void *str, int c, size_t n)

參數(shù)1: 要設(shè)置的內(nèi)存塊
參數(shù)2: 要填充的值,在填充內(nèi)存塊時(shí)是使用該值的無(wú)符號(hào)字符形式。
參數(shù)3: 填充的字符個(gè)數(shù)。
返回值: 返回指向str的指針。

2. 手動(dòng)實(shí)現(xiàn):

源代碼:

#include <stdio.h>
#include <string.h>
void *my_memset(void *str, int c, size_t n)
{
    if (str == NULL) 
        return NULL;
    char *pstr = (char*)str;
    while (n-- > 0) {
        *pstr++ = c ;
    }
    return str;
}
int main()
{
    char p1[20] = {"hello world"};
    char p2[20] = {"hello world"};
    my_memset(p1, '*', 5);
    memset(p2, '*', 5);
    printf("p1 = %s, p2 = %s\n", p1, p2);
    return 0;
}

運(yùn)行結(jié)果:

p1 = ***** world, p2 = ***** world

到此這篇關(guān)于C語(yǔ)言詳細(xì)講解常用字符串處理函數(shù)的文章就介紹到這了,更多相關(guān)C語(yǔ)言字符串函數(shù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C++中的opeartor?new和placement?new使用步驟

    C++中的opeartor?new和placement?new使用步驟

    這篇文章主要介紹了C++中的opeartor?new和placement?new詳解,在很多情況下,placement?new的使用方法和其他普通的new有所不同。這里提供了它的使用步驟,需要的朋友可以參考下
    2022-10-10
  • C++中指針的數(shù)據(jù)類型和運(yùn)算相關(guān)知識(shí)小結(jié)

    C++中指針的數(shù)據(jù)類型和運(yùn)算相關(guān)知識(shí)小結(jié)

    這篇文章主要介紹了C++中指針的數(shù)據(jù)類型和運(yùn)算相關(guān)知識(shí)小結(jié),是C++入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-09-09
  • VSCode搭建C/C++編譯環(huán)境的詳細(xì)教程

    VSCode搭建C/C++編譯環(huán)境的詳細(xì)教程

    Visual Studio Code是一款免費(fèi)開(kāi)源的現(xiàn)代化輕量級(jí)代碼編輯器,支持幾乎所有主流的開(kāi)發(fā)語(yǔ)言的語(yǔ)法高亮、智能代碼補(bǔ)全、自定義熱鍵、括號(hào)匹配、代碼片段、代碼對(duì)比 Diff、GIT 等特性,這篇文章主要介紹了VSCode搭建C/C++編譯環(huán)境,需要的朋友可以參考下
    2020-05-05
  • C++多線程std::call_once的使用

    C++多線程std::call_once的使用

    本文主要介紹了C++多線程std::call_once的使用,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • C++實(shí)現(xiàn)LeetCode(207.課程清單)

    C++實(shí)現(xiàn)LeetCode(207.課程清單)

    這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(207.課程清單),本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • C++?opencv圖像平滑濾波器使用示例

    C++?opencv圖像平滑濾波器使用示例

    這篇文章主要為大家介紹了C++?opencv數(shù)字圖像處理圖像平滑濾波器的使用示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-05-05
  • C語(yǔ)言算法的時(shí)間復(fù)雜度和空間復(fù)雜度

    C語(yǔ)言算法的時(shí)間復(fù)雜度和空間復(fù)雜度

    這篇文章主要介紹了C語(yǔ)言算法的時(shí)間復(fù)雜度和空間復(fù)雜度,算法在編寫成可執(zhí)行程序后,運(yùn)行時(shí)需要耗費(fèi)時(shí)間資源和空間(內(nèi)存)資源,更多相關(guān)需要的朋友可以參考一下
    2022-07-07
  • C語(yǔ)言fgetc和fputc函數(shù)用法詳解(以字符形式讀寫文件)

    C語(yǔ)言fgetc和fputc函數(shù)用法詳解(以字符形式讀寫文件)

    這篇文章主要介紹了C語(yǔ)言fgetc和fputc函數(shù)用法詳解(以字符形式讀寫文件),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • 使用C++實(shí)現(xiàn)Excel文件與CSV之間的相互轉(zhuǎn)換

    使用C++實(shí)現(xiàn)Excel文件與CSV之間的相互轉(zhuǎn)換

    這篇文章主要為大家詳細(xì)介紹了如何使用C++實(shí)現(xiàn)Excel文件與CSV之間的相互轉(zhuǎn)換,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下
    2023-06-06
  • Qt鍵盤事件實(shí)現(xiàn)圖片在窗口上下左右移動(dòng)

    Qt鍵盤事件實(shí)現(xiàn)圖片在窗口上下左右移動(dòng)

    這篇文章主要為大家詳細(xì)介紹了Qt鍵盤事件實(shí)現(xiàn)圖片在窗口上下左右移動(dòng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-08-08

最新評(píng)論