C語言的字符串復(fù)制-創(chuàng)新互聯(lián)

提示:僅供參考,如有錯(cuò)誤,還望指出。

創(chuàng)新互聯(lián)公司是一家專業(yè)從事網(wǎng)站設(shè)計(jì)、網(wǎng)站制作的網(wǎng)絡(luò)公司。作為專業(yè)網(wǎng)站制作公司,創(chuàng)新互聯(lián)公司依托的技術(shù)實(shí)力、以及多年的網(wǎng)站運(yùn)營經(jīng)驗(yàn),為您提供專業(yè)的成都網(wǎng)站建設(shè)、成都全網(wǎng)營銷及網(wǎng)站設(shè)計(jì)開發(fā)服務(wù)!

目錄

目錄

一、字符串復(fù)制

二、一些優(yōu)化

1.一次簡單優(yōu)化

2.二次優(yōu)化

3.三次優(yōu)化

4.四次優(yōu)化

5.最后的優(yōu)化

總結(jié)


前言

以下是對(duì)字符串復(fù)制的一些優(yōu)化

一、字符串復(fù)制

這是自己能想到的方法

主要思想:通過兩個(gè)指針,對(duì)二者進(jìn)行遍歷,若該被復(fù)制的字符不為‘\0’來進(jìn)行一一復(fù)制。

可是這樣‘\0’字符就無法復(fù)制,而此時(shí)被復(fù)制字符的地址剛好又是‘\0’,再進(jìn)行一次復(fù)制就好。

//我的字符串復(fù)制
void my_strcpy(char* dest,char* rsc)
{
	while (*rsc != '\0')
	{
		*dest = *rsc;
		dest++;
		rsc++;
	}
	*dest = *rsc;
}
二、一些優(yōu)化

注:這些優(yōu)化都是基于前一次的優(yōu)化,也體現(xiàn)出一個(gè)循序漸進(jìn)的過程

1.一次簡單優(yōu)化

這里實(shí)現(xiàn)了一小點(diǎn)的優(yōu)化,也就是將三句語句合成一句

void my_strcpy(char* dest, char* rsc)
{
	while (*rsc != '\0')
	{
		*dest++ = *rsc++;
	}
	*dest = *rsc;
}

2.二次優(yōu)化

這里實(shí)現(xiàn)了我們既可以賦值字符也能夠復(fù)制'\0'

由于當(dāng)被復(fù)制的字符為‘\0’時(shí),也得到了復(fù)制,同時(shí)還跳出了循環(huán)

void my_strcpy(char* dest, char* rsc)
{
	while (*dest++ = *rsc++)
	{
		;
	}
}

3.三次優(yōu)化

這里優(yōu)化了健壯性,可這里沒有體現(xiàn)出問題在哪。

在二次優(yōu)化中,添加了一個(gè)判斷語句,只有二者同時(shí)不為空指針時(shí),才會(huì)進(jìn)入遍歷復(fù)制的過程。

void my_strcpy(char* dest, char* rsc)
{
	if (dest != NULL && rsc != NULL)
	{
		while (*dest++ = *rsc++)
		{
			;
		}
	}
}

4.四次優(yōu)化

這里用到了斷言函數(shù)assert();同時(shí)需要添加該頭文件

使用assert()函數(shù),若不滿足函數(shù)體中條件,就會(huì)報(bào)錯(cuò),并且具體體現(xiàn)在哪一行,更有利于找錯(cuò)。

#include
my_strcpy(char* dest, char* rsc)
{
	assert(dest != NULL);
	assert(rsc != NULL);
	while (*dest++ = *rsc++)
	{
		;
	}
}

5.最后的優(yōu)化

這個(gè)就比較細(xì)節(jié),也是為了防止一些錯(cuò)誤而形成的優(yōu)化。

在被復(fù)制字符中加上一個(gè)const,為了防止while循環(huán)中的條件,若不注意將二者位置調(diào)換,就會(huì)出現(xiàn)報(bào)錯(cuò)的情況。

這里也給大家推薦一個(gè)網(wǎng)站cplusplus.com - The C++ Resources Network?

若有不懂的函數(shù)或者函數(shù)需要的頭文件都可以在這里查。? ? ? ? ?這里也到了strcpy函數(shù)中參數(shù)的類型,若以后要寫類似于庫函數(shù)的函數(shù)也可以考慮這里面的參數(shù)類型。

#include
void my_strcpy(char* dest, const char* rsc)
{
	assert(dest != NULL);
	assert(rsc != NULL);
	while (*dest++ = *rsc++)
	{
		;
	}
}

總結(jié)

?在我看來,編程很像數(shù)學(xué),每當(dāng)你了解到一個(gè)題目的多種解法后,有些解法會(huì)給人一種十分奇妙的感覺,也有一種勾起好奇心的感覺,就是由于這種好奇心,促使這我們成長。不過有時(shí)候的編程也很乏味,但是我們一定要堅(jiān)持。

學(xué)習(xí)不易,如果這篇對(duì)你有幫助,足矣。

最后附上學(xué)習(xí)的鏈接(同樣要是有一起學(xué)習(xí)的伙伴就更好了)

25.VS環(huán)境-C語言實(shí)用調(diào)試技巧(2)(C語言程序設(shè)計(jì)教程譚浩強(qiáng) c語言譚浩強(qiáng)視頻教程 c語言零基礎(chǔ)入門教程 學(xué)習(xí)c語言 c語言視頻教程 c語音 C語言教程_嗶哩嗶哩_bilibili

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購,新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧

網(wǎng)站欄目:C語言的字符串復(fù)制-創(chuàng)新互聯(lián)
鏈接地址:http://muchs.cn/article2/djgioc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供小程序開發(fā)、Google、自適應(yīng)網(wǎng)站、全網(wǎng)營銷推廣網(wǎng)站建設(shè)、品牌網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站網(wǎng)頁設(shè)計(jì)