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)文章
OpenCV中的cv::Mat函數(shù)將數(shù)據(jù)寫(xiě)入txt文件
這篇文章主要介紹了OpenCVcv::Mat中的數(shù)據(jù)按行列寫(xiě)入txt文件中,需要的朋友可以參考下2018-05-05
c++調(diào)用python實(shí)現(xiàn)圖片ocr識(shí)別
所謂c++調(diào)用python,實(shí)際上就是在c++中把整個(gè)python當(dāng)作一個(gè)第三方庫(kù)引入,然后使用特定的接口來(lái)調(diào)用python的函數(shù)或者直接執(zhí)行python腳本,本文介紹的是調(diào)用python實(shí)現(xiàn)圖片ocr識(shí)別,感興趣的可以了解下2023-09-09
c++ vector對(duì)象相關(guān)總結(jié)
這篇文章主要介紹了c++ vector對(duì)象的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)使用c++,感興趣的朋友可以了解下2021-02-02
C++實(shí)現(xiàn)順序排序算法簡(jiǎn)單示例代碼
這篇文章主要介紹了C++實(shí)現(xiàn)順序排序算法簡(jiǎn)單示例代碼,對(duì)于學(xué)過(guò)C++的朋友一定不會(huì)陌生,現(xiàn)在重溫一下這個(gè)算法,需要的朋友可以參考下2014-08-08
C語(yǔ)言結(jié)構(gòu)體鏈表和指針實(shí)現(xiàn)學(xué)生管理系統(tǒng)
這篇文章主要介紹了C語(yǔ)言結(jié)構(gòu)體鏈表和指針實(shí)現(xiàn)學(xué)生管理系統(tǒng),包括學(xué)生檔案管理子系統(tǒng)和學(xué)生成績(jī)管理子系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-06-06
OpenCV透視變換應(yīng)用之書(shū)本視圖矯正+廣告屏幕切換
透視變換是指利用透視中心、像點(diǎn)、目標(biāo)點(diǎn)三點(diǎn)共線的條件,按透視旋轉(zhuǎn)定律使承影面繞跡線旋轉(zhuǎn)某一角度,破壞原有的投影光線束,仍能保持承影面上投影幾何圖形不變的變換。本文將為大家介紹兩個(gè)OpenCV透視變換應(yīng)用,需要的可以參考一下2022-08-08
C語(yǔ)言實(shí)現(xiàn)校運(yùn)動(dòng)會(huì)項(xiàng)目管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)校運(yùn)動(dòng)會(huì)項(xiàng)目管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-02-02

