91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

字符串相關函數的模擬實現

發布時間:2020-07-12 07:10:10 來源:網絡 閱讀:433 作者:劉二陽二陽 欄目:編程語言

要模擬庫函數的實現,必須要搞清楚的是在程序調用中它的實現原理是什么,接下來就講解幾個字符串相關的函數,比如strcmp(),strncmp(),strcat(),strncat()......


字符串函數主要包括受限制字符串函數與不受限制字符串函數,那么什么是受限制字符串函數與不受限制字符串函數呢?!簡單來講,不受限制字符串函數就是使用這些函數時,它們只是通過字符串結尾的NULL 字符確定字符串的長度,例如我們常用的strcmp(),strcpy();而受限制的字符串函數就是這些函數她們接受一個顯示的長度參數,來限定要復制或者比較的字符個數,例如strncmp(),strncpy(),這里邊的n在函數名和函數傳參中都有,n即為要操作的字符個數。


一、不受限制字符串函數

1.strcpy()

庫函數原型:char *strcpy( char *strDestination, const char *strSource );

實現:將拷貝的字符串str2一個一個拷貝到字符數組str1中,直到字符數組遇到‘\0’結束標志后拷貝完成。在拷貝時,str2中的'\0'一同被拷貝。

char *my_strcpy(char *str1,const char *str2)
{
	char *start = str1;        //保存字符數組2的首地址
	assert(str1);
	assert(str2);
	while(*str1++ =  *str2++)
	{
		;
	}
	return start;
}


2.strlen()

庫函數原型:size_t strlen( const char *string );

實現:在遇到'\0'之前,指針每向后挪動一次,計數器加一次

int my_strlen(const char *str1)
{
	int count = 0;
	assert(str1);
	while(*str1++)
	{
		count++;
		//str1++;
	}
	return count;
}


3.strcmp()

庫函數原型:int strcmp( const char *string1, const char *string2 );

比較規則:兩個字符串自左向右逐個字符比較(按ASCII碼的值比較),知道出現不同的字符或者遇到‘\0’。

(1)如果字符全部相等,則兩個字符串相等;

(2)如果出現不同的字符,則以第一對不相同字符的比較結果為準。

比較的結果由函數值帶回:

(1)字符串1 = 字符串2,返回0;

(2)字符串1 > 字符串2 ,返回一個正整數;

(3)字符串1 < 字符串2,返回一個負整數。

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


4.strcat()

庫函數原型:char *strcat( char *strDestination, const char *strSource );

實現:指針指到字符數組1 的結尾時,將字符串2 中的字符一個一個追加到字符數組1 的后面,指針向后挪一次,字符拷貝一個,直到字符數組1 遇到‘\0’時追加完畢。(字符數組1 要足夠大,能把字符串2 都添加進去)

char *my_strcat(char *str1,const char *str2)
{
	char *start = str1;    //保存字符數組的首地址
	assert(str1);
	assert(str2);
	while(*str1)
	{
		str1++;
	}
	while(*str2)
	{
		*str1 = *str2;
		str1++;
		str2++;
	}
	*str1 = '\0';
	return start;
}


5.strstr()

庫函數原型:char *strstr( const char *string, const char *strCharSet );

實現:在字符串str1 中找子字符串str2,如果能找到,就返回子串的起始位置,如果找不到,就返回NULL

char *my_strstr(const char *str, const char *substr)
{
	const char *str1 = str;
	const char *str2 = substr;
	const char *start = NULL;         
	assert(str);
	assert(substr);
	if(*str2 == '\0')
		return (char *)str1;
	while(*str1)
	{
		start = str1;           //找到的第一個字符保存
		while(*str1 && *str2 && *str1 == *str2)
		{
			str1++;
			str2++;
		}
		if(*str2 == '\0')
			return (char *)start;
		str1 = start + 1;
		str2 = substr;
	}
	return NULL;
}



二、受限制字符串函數

1.strncat()

原型:char *strncat( char *strDest, const char *strSource, size_t count );

count為要追加的字符個數

char *my_strncat(char *str1,char *str2,size_t n)
{
	char *start = str1;      //保存字符數組1 的起始地址
	assert(str1);
	assert(str2);
	while(*str1)
	{
		str1++;
	}
	while(n)
	{
		*str1 = *str2;
		str1++;
		str2++;
		n--;
	}
	*str1 = '\0';
	return start;
}


2.strncmp()

函數原型:char *strncpy( char *strDest, const char *strSource, size_t count );

int my_strncmp(const char *str1,const char *str2,size_t n)
{
	assert(str1);
	assert(str2);
	while(n && *str1 && *str1 == *str2)
	{
		if(*str1 != '\0')
			return 0;
		str1++;
		str2++;
		n--;
	}
	return *str1 - *str2;
}


3.strncpy()

庫函數原型:char *strncpy( char *strDest, const char *strSource, size_t count );

char *my_strncpy(char *str1,char *str2,size_t n)
{
	char *start = str1;
	assert(str1);
	assert(str2);
	while((n--) && (*str1++ = *str2++))
	{
		//*str1++ = *str2++;
		//n--;
	}
	*str1 = '\0';
	return start;
}



向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

南康市| 介休市| 安龙县| 玉环县| 罗田县| 桃江县| 济南市| 淮北市| 黔东| 双峰县| 新泰市| 新乐市| 祥云县| 高邮市| 金川县| 辽阳市| 灵山县| 达尔| 灌南县| 鲁山县| 紫金县| 巧家县| 塘沽区| 闻喜县| 大田县| 黑龙江省| 铁岭市| 昌平区| 花莲县| 称多县| 白银市| 河东区| 洛扎县| 望城县| 平潭县| 高邑县| 呼图壁县| 上思县| 澜沧| 罗江县| 马公市|