C語(yǔ)言詳細(xì)講解常用字符串處理函數(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詳解,在很多情況下,placement?new的使用方法和其他普通的new有所不同。這里提供了它的使用步驟,需要的朋友可以參考下2022-10-10C++中指針的數(shù)據(jù)類型和運(yùn)算相關(guān)知識(shí)小結(jié)
這篇文章主要介紹了C++中指針的數(shù)據(jù)類型和運(yùn)算相關(guān)知識(shí)小結(jié),是C++入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下2015-09-09VSCode搭建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-05C++實(shí)現(xiàn)LeetCode(207.課程清單)
這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(207.課程清單),本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-08-08C語(yǔ)言算法的時(shí)間復(fù)雜度和空間復(fù)雜度
這篇文章主要介紹了C語(yǔ)言算法的時(shí)間復(fù)雜度和空間復(fù)雜度,算法在編寫成可執(zhí)行程序后,運(yùn)行時(shí)需要耗費(fèi)時(shí)間資源和空間(內(nèi)存)資源,更多相關(guān)需要的朋友可以參考一下2022-07-07C語(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)換
這篇文章主要為大家詳細(xì)介紹了如何使用C++實(shí)現(xiàn)Excel文件與CSV之間的相互轉(zhuǎn)換,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下2023-06-06Qt鍵盤事件實(shí)現(xiàn)圖片在窗口上下左右移動(dòng)
這篇文章主要為大家詳細(xì)介紹了Qt鍵盤事件實(shí)現(xiàn)圖片在窗口上下左右移動(dòng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-08-08