官术网_书友最值得收藏!

1.1.4 字符串的展開(kāi)

【上機(jī)練習(xí)】字符串的展開(kāi)(expand)NOIP 2007

如果在輸入的字符串中含有類(lèi)似于“d-h”或者“4-8”的子串,我們就把它當(dāng)作一種簡(jiǎn)寫(xiě)。輸出時(shí),用連續(xù)遞增的字母或數(shù)字串替代其中的“-”,即將上面的兩個(gè)子串分別輸出為“defgh”和“45678”。在本題中,我們通過(guò)增加一些參數(shù),使字符串的展開(kāi)更為靈活。約定如下。

(1)遇到下面的情況需要進(jìn)行字符串的展開(kāi):在輸入的字符串中,出現(xiàn)了“-”,“-”兩邊同為小寫(xiě)字母或同為數(shù)字,且按照ASCII的順序,“-”右邊的字符嚴(yán)格大于左邊的字符。

(2)參數(shù)p1:當(dāng)p1=1時(shí),對(duì)于字母子串,填充小寫(xiě)字母;p1=2時(shí),對(duì)于字母子串,填充大寫(xiě)字母(這兩種情況下數(shù)字子串的填充方式相同);p1=3時(shí),不論是字母子串還是數(shù)字子串,都用與要填充的字母或數(shù)字個(gè)數(shù)相同的星號(hào)“*”來(lái)填充。 

(3)參數(shù)p2:填充字符的重復(fù)個(gè)數(shù)。p2=k表示同一個(gè)字符要連續(xù)填充k次。例如當(dāng)p2=3時(shí),子串“d-h”應(yīng)擴(kuò)展為“deeefffgggh”。“-”兩邊的字符不變。 

(4)參數(shù)p3:確定是否改為逆序。p3=1表示維持原來(lái)順序,p3=2表示采用逆序輸出,注意這時(shí)候仍然不包括“-”兩邊的字符。例如當(dāng)p1=1、p2=2、p3=2時(shí),子串“d-h”應(yīng)擴(kuò)展為“dggffeeh”。

(5)如果“-”右邊的字符恰好是左邊字符的后繼,刪除中間的“-”,例如“d-e”應(yīng)輸出為“de”,“3-4”應(yīng)輸出為“34”。如果“-”右邊的字符按照ASCII的順序小于或等于左邊的字符,輸出時(shí),保留中間的“-”,例如“d-d”應(yīng)輸出為“d-d”,“3-1”應(yīng)輸出為“3-1”。

【輸入格式】

第1行為用空格分隔的3個(gè)正整數(shù),依次表示參數(shù)p1p2p3。 

第2行為字符串,僅由數(shù)字、小寫(xiě)字母和“-”組成,行首和行末均無(wú)空格。

【輸出格式】 

只有一行,為展開(kāi)后的字符串。 

【輸入樣例1】 

1 2 1 

abcs-w1234-9s-4zz

【輸出樣例1】 

abcsttuuvvw1234556677889s-4zz

【輸入樣例2】

2 3 2 

a-d-d

【輸出樣例 2】 

aCCCBBBd-d

【輸入樣例3】 

3 4 2 

di-jkstra2-6 

【輸出樣例3】 

dijkstra2************

【數(shù)據(jù)規(guī)模】

40%的數(shù)據(jù)滿足:字符串長(zhǎng)度不超過(guò)5。 

100%的數(shù)據(jù)滿足:1p13,1p28,1p32,字符串長(zhǎng)度不超過(guò)100。

【算法分析】

雖然這是一道簡(jiǎn)單的模擬題,但是細(xì)節(jié)要考慮周全,例如“-”可能出現(xiàn)在字符串的第一個(gè)或最后一個(gè),也可能連續(xù)出現(xiàn)。

此外,對(duì)于字符c來(lái)說(shuō),判斷它是否為小寫(xiě)英文字母可以用islower(c),判斷它是否為大寫(xiě)英文字母可以用isupper(c),判斷它是否為數(shù)字可以用isdigit(c),將之轉(zhuǎn)為小寫(xiě)字母可以用tolower(c),將之轉(zhuǎn)為大寫(xiě)字母可以用toupper(c)。

主站蜘蛛池模板: 清镇市| 德昌县| 观塘区| 青州市| 上犹县| 武安市| 云浮市| 将乐县| 襄垣县| 任丘市| 通许县| 凌海市| 湖州市| 永清县| 广东省| 应城市| 家居| 永善县| 历史| 乌兰县| 合水县| 龙州县| 荔波县| 平邑县| 曲靖市| 宜川县| 邳州市| 象州县| 涟水县| 天台县| 饶河县| 东丰县| 昌乐县| 宁南县| 华安县| 崇义县| 泸州市| 阿勒泰市| 厦门市| 小金县| 偏关县|