真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

C語言經(jīng)典題目之字符串逆序-創(chuàng)新互聯(lián)

目錄

在成都網(wǎng)站設計、成都網(wǎng)站制作、外貿(mào)網(wǎng)站建設中從網(wǎng)站色彩、結(jié)構(gòu)布局、欄目設置、關鍵詞群組等細微處著手,突出企業(yè)的產(chǎn)品/服務/品牌,幫助企業(yè)鎖定精準用戶,提高在線咨詢和轉(zhuǎn)化,使成都網(wǎng)站營銷成為有效果、有回報的無錫營銷推廣。創(chuàng)新互聯(lián)專業(yè)成都網(wǎng)站建設10余年了,客戶滿意度97.8%,歡迎成都創(chuàng)新互聯(lián)客戶聯(lián)系。

一、字符串逆序(基礎題)

1.一個經(jīng)典的錯誤,標準的零分

2.采用gets函數(shù)來修補漏洞

?編輯

3.非要使用scanf怎么辦?

4.使用指針來實現(xiàn)逆序函數(shù)

5.將函數(shù)修改為,只要傳入兩個地址,就能逆序這兩個地址之間的字符串。

二、字符串逆序(進階)


一、字符串逆序(基礎題)

鏈接:字符逆序__牛客網(wǎng)
來源:??途W(wǎng)

這道題的要求是讓我們實現(xiàn)一個字符串逆序

1.一個經(jīng)典的錯誤,標準的零分

這道題其實,思路上不難,但是有一個點處很容易犯錯,我們看下面這個代碼

#include#includevoid reverse(char* str)
{
	int left = 0;
	int right = strlen(str) - 1;
	while (left< right)
	{
		char tmp = 0;
		tmp = *(str + left);
		*(str + left) = *(str + right);
		*(str + right) = tmp;
		left++;
		right--;
	}
}
int main()
{
	char arr[10000] = { 0 };
	scanf("%s", arr);
	reverse(arr);
	printf("%s", arr);
	return 0;
}

看似正確,但實際上存在一個問題,我們現(xiàn)在??途W(wǎng)上跑一下

果然如我們所料,出現(xiàn)意外了,那么問題出在哪里了呢?其實,問題是出在scanf上了,scanf默認讀取到空格就結(jié)束了,因此這道題其實只讀取了一個d,反轉(zhuǎn)之后當然是d了

2.采用gets函數(shù)來修補漏洞

既然scanf不能用,那么該如何解決呢?,其實我們c語言中還有一個函數(shù)叫做gets()函數(shù),他也可以讀取一個字符串,他不會讀取到空格就結(jié)束了

代碼如下

#include#includevoid reverse(char* str)
{
	int left = 0;
	int right = strlen(str) - 1;
	while (left< right)
	{
		char tmp = 0;
		tmp = *(str + left);
		*(str + left) = *(str + right);
		*(str + right) = tmp;
		left++;
		right--;
	}
}
int main()
{
	char arr[10000] = { 0 };
	gets(arr);
	reverse(arr);
	printf("%s", arr);
	return 0;
}

??途W(wǎng)運行結(jié)果為

3.非要使用scanf怎么辦?

有些時候,非要使用scanf解決這個問題,那么我們?nèi)绾螌崿F(xiàn)呢?,其實我們可以將%s修改為%[^\n],意思是,讀取到\n才結(jié)束讀取

代碼如下

#include#includevoid reverse(char* str)
{
	int left = 0;
	int right = strlen(str) - 1;
	while (left< right)
	{
		char tmp = 0;
		tmp = *(str + left);
		*(str + left) = *(str + right);
		*(str + right) = tmp;
		left++;
		right--;
	}
}
int main()
{
	char arr[10000] = { 0 };
	//gets(arr);
	scanf("%[^\n]", arr);
	reverse(arr);
	printf("%s", arr);
	return 0;
}

??途W(wǎng)運行結(jié)果為

4.使用指針來實現(xiàn)逆序函數(shù)

上面的實現(xiàn)方式,其實本質(zhì)上仍然屬于數(shù)組的形式,那么我們能不能改為指針呢?答案是可以的,請看下面的代碼

#include#includevoid reverse(char* str)
{
	char* left = str;
	char* right = str + strlen(str) - 1;
	while (left< right)
	{
		char tmp = 0;
		tmp = *left;
		*left = *right;
		*right = tmp;
		left++;
		right--;
	}
}
int main()
{
	char arr[10000] = { 0 };
	//gets(arr);
	scanf("%[^\n]", arr);
	reverse(arr);
	printf("%s", arr);
	return 0;
}

??途W(wǎng)運行結(jié)果為

5.將函數(shù)修改為,只要傳入兩個地址,就能逆序這兩個地址之間的字符串。

經(jīng)歷了上面的思考,我們在想,這個逆序多多少少還是有一點不方便,比如在某一個字符串中,我們不想逆序整個字符串,我們只想要逆序一部分,這時候我們上面的函數(shù)適用性就不夠了,所以我們最好將其改成只要傳入兩個地址,就可以逆序這兩個地址之間的字符串,這樣的話,這個函數(shù)就變得很好用了。

代碼如下

#include#includevoid reverse(char* left,char* right)
{
	while (left< right)
	{
		char tmp = 0;
		tmp = *left;
		*left = *right;
		*right = tmp;
		left++;
		right--;
	}
}
int main()
{
	char arr[10000] = { 0 };
	//gets(arr);
	scanf("%[^\n]", arr);
	reverse(arr, arr + strlen(arr) - 1);
	printf("%s", arr);
	return 0;
}

??途W(wǎng)運行結(jié)果為

二、字符串逆序(進階)

有了上面那到題目作為基礎,我們可以嘗試做一下這道題

鏈接:倒置字符串_牛客題霸_??途W(wǎng)

來源:??途W(wǎng)

這道題我們可以看的出來,是上一道題的進階版,但是根據(jù)我們上一道題的思考之后,這道題其實也沒有那么難,因為我們已經(jīng)創(chuàng)建一個函數(shù),只要傳入兩個地址,就可以逆序這兩個地址之間的字符串。

所以我們的思路就是,先逆序,整個字符串,然后逆序每一個單詞

代碼如下

#include#includevoid reverse(char* left,char* right)
{
	while (left< right)
	{
		char tmp = 0;
		tmp = *left;
		*left = *right;
		*right = tmp;
		left++;
		right--;
	}
}
int main()
{
	char arr[100] = { 0 };
	gets(arr);
	//逆序整句話
	reverse(arr, arr + strlen(arr) - 1);
	//逆序每一個單詞
	char* p1 = arr;
	char* p2 = arr;
	while (*p2 != '\0')
	{
		p1 = p2;
		while (*p2 != ' '&&*p2!='\0')
		{
			p2++;
		}
		reverse(p1, p2 - 1);
		if (*p2 == '\0')
		{
			break;
		}
		p2++;
	}
	printf("%s", arr);
	return 0;
}

對于這段代碼的逆序每一個單詞環(huán)節(jié),可能有很多人都有所困惑。為什么是這樣實現(xiàn)的呢?

我們逆序單詞是采用的雙指針的方法。先定義兩個字符指針他們指向字符串的首元素地址,然后我們令p1先不動,p2往下走,只要我的p2不是'\0',自然就可以一直走下去,在里面我們先采用一個while循環(huán),來讓p2 走到單詞的末尾,然后使用逆序函數(shù),逆序這兩者之間的單詞,然后判斷一下p2的里面的值是否為\0,如果此時為\0就不需要進行接下來的步驟了,直接結(jié)束即可。

但是如果此時不為'\0',那么就要繼續(xù)執(zhí)行下去,先讓p2++,讓我們的p2指向下一個單詞的首元素,將下一個單詞的首元素交給p1,然后p2繼續(xù)走下去,這樣循環(huán)下去就可以實現(xiàn)目標了。

??途W(wǎng)運行結(jié)果為

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


本文題目:C語言經(jīng)典題目之字符串逆序-創(chuàng)新互聯(lián)
URL地址:http://weahome.cn/article/djshcs.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部