国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

深入探索字符串函數(shù)與模擬實現(xiàn)

這篇具有很好參考價值的文章主要介紹了深入探索字符串函數(shù)與模擬實現(xiàn)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

深入探索字符串函數(shù)與模擬實現(xiàn),C語言,算法,c語言

?深入探索字符串函數(shù)與模擬實現(xiàn),C語言,算法,c語言

目錄

?前言:

一.常見函數(shù)的介紹與模擬實現(xiàn)

一.strlen函數(shù)

1.1? strlen函數(shù)的介紹

1.2? strlen的模擬實現(xiàn)(三種方式實現(xiàn))

第一種:計數(shù)器的方式

第二種:遞歸的方式

第三種:指針-指針的方式

二.strcpy函數(shù)與strncpy函數(shù)

2.1? strcpy函數(shù)的介紹?

2.2strncpy函數(shù)的介紹?

2.3? strcpy的模擬實現(xiàn)

三.strcat函數(shù)與strncat函數(shù)

3.1? strcat函數(shù)的介紹

3.2? strncat函數(shù)的介紹?

3.3? strcat函數(shù)的模擬實現(xiàn)

四.strcmp函數(shù)與strncmp函數(shù)

4.1 strcmp?函數(shù)的介紹

4.2? strncmp函數(shù)的介紹

五.strstr函數(shù)

5.1? strstr函數(shù)的介紹

5.2? strstr函數(shù)的模擬實現(xiàn)

總結(jié):


?前言:

C語言中對字符和字符串的處理很是頻繁,但是C語言本身是沒有字符串類型的,字符串通常放常量字符串中或則字符數(shù)組中;字符串常量使用于那些對它不做修改的字符串函數(shù);?

一.常見函數(shù)的介紹與模擬實現(xiàn)

?文章來源地址http://www.zghlxwxcb.cn/news/detail-602921.html

一.strlen函數(shù)

1.1? strlen函數(shù)的介紹

深入探索字符串函數(shù)與模擬實現(xiàn),C語言,算法,c語言

~字符串是以 '\0'?作為結(jié)束標(biāo)志的,strlen函數(shù)返回的是字符串'\0'前面出現(xiàn)的字符個數(shù)(不包含'\0');

~strlen函數(shù)的參數(shù)指向的字符串必須要以'\0'結(jié)束;

~函數(shù)的返回值是size_t,是無符號(特別注意,易錯);(如下代碼)

深入探索字符串函數(shù)與模擬實現(xiàn),C語言,算法,c語言

?

?分析:

strlen(str1)=3;

strlen(str2)=6;

而 3-6=-3 應(yīng)該是小于0的數(shù),運行出結(jié)果卻是大于;因為strlen函數(shù)返回值是無符號的,無符號減去無符號的數(shù),結(jié)果也被當(dāng)成無符號的數(shù),而-3當(dāng)成無符號的數(shù)是一個很大的數(shù);

1.2? strlen的模擬實現(xiàn)(三種方式實現(xiàn))

第一種:計數(shù)器的方式
int my_strlen(const char * str) {
 int count = 0;
 while(*str)
 {
 count++;
 str++;
 }
 return count; 
}
第二種:遞歸的方式
int my_strlen(const char * str) {
 if(*str == '\0')
 return 0;
 else
 return 1+my_strlen(str+1);
}
第三種:指針-指針的方式
int my_strlen(char *s) {
 ? ? ? char *p = s;
 ? ? ? while(*p != ‘\0’ )
 ? ? ? ? ? ? ?p++;
 ? ? ? return p-s; }

?

二.strcpy函數(shù)與strncpy函數(shù)

2.1? strcpy函數(shù)的介紹?

深入探索字符串函數(shù)與模擬實現(xiàn),C語言,算法,c語言

strcpy函數(shù)是將源字符串的字符一個一個進行拷貝目標(biāo)空間去;

這里的strcpy函數(shù)返回值為目標(biāo)空間的起始地址,方便鏈?zhǔn)皆L問;

如printf("%s\n",strcpy(arr1,arr2));

~源字符串必須以'\0'結(jié)束;

~會將源字符串的'\0'拷貝到目標(biāo)空間;

目標(biāo)空間不許足夠大,以確保能存放源字符串;(如果目標(biāo)空間較小時,放不下源字符串,會出錯);

目標(biāo)空間必須可變;

2.2strncpy函數(shù)的介紹?

深入探索字符串函數(shù)與模擬實現(xiàn),C語言,算法,c語言

strncpy函數(shù)的作用與strcpy函數(shù)相似,只是在strcpy函數(shù)的基礎(chǔ)上加上了需要拷貝的字符數(shù),拷貝完再在末尾放個'\0';

例如:strncpy(arr1,arr2,4)? 作用是將arr2中4個字符拷貝到arr1中;

? ? ? ? ? ?strcpy(arr1,arr2)? ? ? ?作用是將arr2整個字符串拷貝到arr1中;

2.3? strcpy的模擬實現(xiàn)

char* my_strcpy(char* dest, const char* src)
{
	char* ret = dest;           //記住目標(biāo)空間的起始地址
	assert(dest != NULL);
    assert(src != NULL);

	while (*src!='\0')         
	{
       *dest=*src;
		dest++;
        src++;
	}

	return ret;                //返回目標(biāo)空間的起始地址
}

三.strcat函數(shù)與strncat函數(shù)

3.1? strcat函數(shù)的介紹

深入探索字符串函數(shù)與模擬實現(xiàn),C語言,算法,c語言

~源字符串必須以'\0'結(jié)束;

~目標(biāo)空間必須有足夠的大,能容納下源字符串的內(nèi)容;

~目標(biāo)空間必須可修改;

注意:字符串不能給自己追加字符串;

3.2? strncat函數(shù)的介紹?

深入探索字符串函數(shù)與模擬實現(xiàn),C語言,算法,c語言

strncat函數(shù)的作用與strcat函數(shù)相似,只是在strcat函數(shù)的基礎(chǔ)上加上了需要追加的字符數(shù);追加完后再在末尾放個'\0'

例如:strcat(arr1,arr2)? ? ? ? ? 作用是將arr2中整個字符串追加到arr1后面

? ? ? ? ? ?strncat(arr1,arr2,4)? ? ?作用是將arr2中4個字符追加到arr1的后面

3.3? strcat函數(shù)的模擬實現(xiàn)

char* my_strcat(char* dest, const char* src) 
{
	char* ret = dest;
	assert(dest != NULL);
	assert(src != NULL);
	while (*dest)
	{
		dest++;
	}
	while ((*dest++ = *src++))
	{
		;
	}
	return ret;
}

四.strcmp函數(shù)與strncmp函數(shù)

4.1 strcmp?函數(shù)的介紹

深入探索字符串函數(shù)與模擬實現(xiàn),C語言,算法,c語言

?~標(biāo)準(zhǔn)規(guī)定:

如果第一個字符串大于第二個字符串,返回大于0的數(shù)字;

如果第一個字符串小于第二個字符串,返回小于0的數(shù)字;

如果第一個字符串等于第二個字符串,返回0;

怎么判斷大小呢?

兩個字符串內(nèi)容,一個一個字符依次比較,如

str1? :? ?" asdfgh"? ? ? ? str2 :"asdagh"? ? ??

第一個字符與第一個字符相比,相等,再比較后面的一個字符,知道遇到不同的字符或則遇到'\0'(至少一個字符串遇到'\0');

如上面的兩個字符串,前三個字符都一樣,比第四個,f>a? ??

所以str1>str2? 如下圖

深入探索字符串函數(shù)與模擬實現(xiàn),C語言,算法,c語言

4.2? strncmp函數(shù)的介紹

深入探索字符串函數(shù)與模擬實現(xiàn),C語言,算法,c語言

strncmp函數(shù)的作用與strcmp函數(shù)相似,只是在strcmp函數(shù)的基礎(chǔ)上加上了需要比較到的第幾個字符;

例如:strcmp(arr1,arr2)? ? ? ? ? 作用是將arr1整個字符串與arr2整個字符串比較

? ? ? ? ? ?strncmp(arr1,arr2,4)? ? ?作用是將arr1中前4個字符與arr2中前4個字符比較

4.3? strcmp?函數(shù)的模擬實現(xiàn)

int my_strcmp(const char* str1, const char* str2) 
{
	assert(str1 != NULL);
	assert(str2 != NULL);
	while (*str1==*str2)        
	{
		if (*str1 == '\0')
		{
			return 0;
		}
		str1++;
		str2++;
	}
	if (*str1 > *str2)
		return 1;
	else
		return -1;

}

五.strstr函數(shù)

5.1? strstr函數(shù)的介紹

深入探索字符串函數(shù)與模擬實現(xiàn),C語言,算法,c語言

?函數(shù)的作用:(字符串中找子字符串)

返回指向?str2?中第一次出現(xiàn)的 str1 的指針,如果?str2 不是?str1?的一部分,則返回一個空指針。

匹配過程不包括終止空字符,但它到此為止。

5.2? strstr函數(shù)的模擬實現(xiàn)

char * ?strstr (const char * str1, const char * str2) 
{
 ? ? ? ?char *cp = (char *) str1;
 ? ? ? ?char *s1, *s2;
 ? ? ? ?if ( !*str2 )
 ? ? ? ? ? ?return((char *)str1);
 ? ? ? ?while (*cp)
 ? ? ? {
 ? ? ? ? ? ? ? ?s1 = cp;
 ? ? ? ? ? ? ? ?s2 = (char *) str2;
 ? ? ? ? ? ? ? ?while ( *s1 && *s2 && !(*s1-*s2) )
 ? ? ? ? ? ? ? ? ? ? ? ?s1++, s2++;
 ? ? ? ? ? ? ? ?if (!*s2)
 ? ? ? ? ? ? ? ? ? ? ? ?return(cp);
 ? ? ? ? ? ? ? ?cp++;
 ? ? ? }
 ? ? ? ?return(NULL);
}

總結(jié):

1.? strcpy? ??strcat? ?strcmp? 這三個函數(shù)特別關(guān)注?'\0',不關(guān)注字符串有多長,所以這三個函數(shù)叫長度不受限制的字符串函數(shù);

2.? strncpy? ?strncat? ? strncmp? 是長度受限制的字符串函數(shù);? ?


如果覺得文章不錯,期待你的一鍵三連哦,你的鼓勵是我創(chuàng)作的動力之源,讓我們一起加油,一起奔跑,讓我們頂峰相見!

?

到了這里,關(guān)于深入探索字符串函數(shù)與模擬實現(xiàn)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • C語言:字符函數(shù)和字符串函數(shù)詳解及部分函數(shù)的模擬實現(xiàn)(前篇)

    C語言:字符函數(shù)和字符串函數(shù)詳解及部分函數(shù)的模擬實現(xiàn)(前篇)

    前言: C語言中對 字符和字符串 的處理很是頻繁,但是C語言本身是沒有字符串類型的, 字符串通常放在 常量字符串 中或者 字符數(shù)組 中。 字符串常量 適用于那些對它不做修改的字符串函數(shù)。 本篇文章將會 重點介紹處理字符和字符串的庫函數(shù)的使用和注意事項。 strlen函數(shù)

    2024年02月06日
    瀏覽(34)
  • 【C語言】——字符串函數(shù)的使用與模擬實現(xiàn)(上)

    【C語言】——字符串函數(shù)的使用與模擬實現(xiàn)(上)

    ??在我們學(xué)習(xí) C語言 的過程中,對 庫函數(shù) 的使用是必不可少的。其中,相信大家最熟悉的就是 s t d i o . h stdio.h s t d i o . h 中的 p r i n t print p r in t 和 s c a n f scanf sc an f 函數(shù)了吧。 ??但是今天,我們不講他們(太難了,嗚嗚嗚),今天我們來講與字符串相關(guān)的函數(shù),也就

    2024年04月26日
    瀏覽(25)
  • 【我愛C語言】詳解字符函數(shù)isdigit和字符串轉(zhuǎn)換函數(shù)(atoi和snprintf實現(xiàn)互相轉(zhuǎn)換字符串)&&三種strlen模擬實現(xiàn)

    【我愛C語言】詳解字符函數(shù)isdigit和字符串轉(zhuǎn)換函數(shù)(atoi和snprintf實現(xiàn)互相轉(zhuǎn)換字符串)&&三種strlen模擬實現(xiàn)

    ??個人主頁 : @啊森要自信的主頁 ?? 真正相信奇跡的家伙,本身和奇跡一樣了不起?。?歡迎大家關(guān)注??點贊??收藏??留言??希望看完我的文章對你有小小的幫助,如有錯誤,可以指出,讓我們一起探討學(xué)習(xí)交流,一起加油鴨。 本小節(jié)我們將學(xué)習(xí)字符分類函數(shù),字符

    2024年02月04日
    瀏覽(33)
  • C語言:字符串函數(shù)的使用方法及模擬實現(xiàn)

    C語言:字符串函數(shù)的使用方法及模擬實現(xiàn)

    方法一:計數(shù)器方式 方法二:指針-指針 1.1 strcpy只用于字符串復(fù)制,遇到‘\\0’時停止,還會復(fù)制字符串的結(jié)束符\\\'\\0\\\'; 所以源字符串必須 ? ? ? ? 以’\\0’結(jié)束,也會將源字符串的’\\0’拷貝到目標(biāo)空間。 1.2 目標(biāo)空間必須可變。 1.3 如果參數(shù)dest所指的內(nèi)存空間不夠大,可能

    2024年04月25日
    瀏覽(23)
  • c語言進階部分詳解(詳細解析字符串常用函數(shù),并進行模擬實現(xiàn)(下))

    c語言進階部分詳解(詳細解析字符串常用函數(shù),并進行模擬實現(xiàn)(下))

    上篇文章介紹了一些常用的字符串函數(shù),大家可以跳轉(zhuǎn)過去瀏覽一下:c語言進階部分詳解(詳細解析字符串常用函數(shù),并進行模擬實現(xiàn)(上))_總之就是非常唔姆的博客-CSDN博客 今天接著來介紹一些:? 目錄 一.字符串查找 1.strstr() 1.1示例 1.2注意事項: 1.3模擬實現(xiàn) ?2.

    2024年02月07日
    瀏覽(20)
  • 【C語言】字符串函數(shù)strcpy&&strcat&&strcmp&&strstr的使?和模擬實現(xiàn)

    【C語言】字符串函數(shù)strcpy&&strcat&&strcmp&&strstr的使?和模擬實現(xiàn)

    ??個人主頁 : @啊森要自信的主頁 ?? 真正相信奇跡的家伙,本身和奇跡一樣了不起啊! 歡迎大家關(guān)注??點贊??收藏??留言??希望看完我的文章對你有小小的幫助,如有錯誤,可以指出,讓我們一起探討學(xué)習(xí)交流,一起加油鴨。 記上節(jié),我們學(xué)了字符串 strlen 的使用和

    2024年02月05日
    瀏覽(21)
  • 深入解析C語言中的字符串和字符串處理函數(shù)

    標(biāo)題:詳解C語言中的字符串和字符串處理函數(shù) 目錄: 1.引言 2.什么是C語言中的字符串 3.字符串的表示方式 4.C語言中的字符串處理函數(shù) 5.例子:使用字符串處理函數(shù)的示例代碼 6.總結(jié) 在C語言中,字符串是一種常見的數(shù)據(jù)類型,用于存儲一串字符。本篇博客將詳細介紹C語言中

    2024年02月15日
    瀏覽(41)
  • 字符函數(shù)和字符串函數(shù)的模擬實現(xiàn)

    字符函數(shù)和字符串函數(shù)的模擬實現(xiàn)

    求字符串長度 strlen ?長度不受限制的字符串函數(shù) strcpy strcmp strcat 長度受限制的字符串函數(shù) strnlen strncmp strncpy strncat 字符串查找 strstr strtok 錯誤信息報告 strerror 內(nèi)存操作函數(shù) memcpy memmove memset memcmp ?首先我們來看strlen 字符串是以‘\\0’為結(jié)束標(biāo)志,strlen函數(shù)返回的是‘\\0’出現(xiàn)

    2024年02月13日
    瀏覽(23)
  • 字符函數(shù)和字符串函數(shù)解析及模擬實現(xiàn)

    字符函數(shù)和字符串函數(shù)解析及模擬實現(xiàn)

    字符串以’\\0’作為結(jié)束標(biāo)志,strlen函數(shù)返回的是在字符串中’\\0’前面出現(xiàn)過的字符個數(shù)(不包括’\\0’)。 參數(shù)指向的字符串必須以’\\0’結(jié)束。 注意函數(shù)的返回值位size_t, 是無符號的 。 Copies the C string pointed by source into the array pointed by destination, including the terminating null c

    2024年02月16日
    瀏覽(19)
  • 【C語言】深入精講字符串處理函數(shù)使用與優(yōu)化

    【C語言】深入精講字符串處理函數(shù)使用與優(yōu)化

    目錄 一、字符串處理函數(shù) 1、測量字符串的長度 strlen 2、字符串拷貝函數(shù)?strcpy/strncpy(拷貝前n個字符) ?3、字符串追加函數(shù)strcat/strncat 4、字符串比較函數(shù)strcmp ?5、字符查找函數(shù)strchr/strrchr ?6、字符串查找strstr 7、字符串替換函數(shù)memset 8、字符串 切割?strtok ?二、字符串轉(zhuǎn)數(shù)值

    2024年02月17日
    瀏覽(30)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包