vijos 1379 字串的展開

2021-08-01 03:06:02 字數 1720 閱讀 4670

描述

在初賽普及組的「閱讀程式寫結果」的問題中,我們曾給出乙個字串展開的例子:如果在輸入的

字串中,含有類似於「d-h」或者「4-8」的字串,我們就把它當作一種簡寫,輸出時,用連續

遞增的字母獲數字串替代其中的減號,即,將上面兩個子串分別輸出為「defgh」和「45678」。在

本題中,我們通過增加一些引數的設定,使字串的展開更為靈活。具體約定如下:

1.遇到下面的情況需要做字串的展開:在輸入的字串中,出現了減號「-」,減號兩側同為小寫字母或同為數字,且按照ascii碼的順序,減號右邊的字元嚴格大於左邊的字元。

2.引數p1:展開方式。p1=1時,對於字母子串,填充小寫字母;p1=2時,對於字母子串,填充大寫字母。這兩種情況下數字子串的填充方式相同。p1=3時,不論是字母子串還是數字字串,都用與要填充的字母個數相同的星號「*」來填充。

3.引數p2:填充字元的重複個數。p2=k表示同乙個字元要連續填充k個。例如,當p2=3時,子串「d-h」應擴充套件為「deeefffgggh」。減號兩邊的字元不變。

4.引數p3:是否改為逆序:p3=1表示維持原來順序,p3=2表示採用逆序輸出,注意這時候仍然不包括減號兩端的字元。例如當p1=1、p2=2、p3=2時,子串「d-h」應擴充套件為「dggffeeh」。

5.如果減號右邊的字元恰好是左邊字元的後繼,只刪除中間的減號,例如:「d-e」應輸出為「de 」,「3-4」應輸出為「34」。如果減號右邊的字元按照ascii碼的順序小於或等於左邊字元,輸出 時,要保留中間的減號,例如:「d-d」應輸出為「d-d」,「3-1」應輸出為「3-1」。

格式輸入格式

包括兩行:

第1行為用空格隔開的3個正整數,一次表示引數p1,p2,p3。

第2行為一行字串,僅由數字、小寫字母和減號「-」組成。行首和行末均無空格。

輸出格式

只有一行,為展開後的字串。

樣例1:

樣例輸入1

1 2 1

abcs-w1234-9s-4zz

樣例輸出1

abcsttuuvvw1234556677889s-4zz

限制 1s

思路

模擬 進行字串操作

將操作過程寫成函式 進行輸出 一定要注意細節 考慮特殊情況

如』-『開頭,』—』連在一起,還有當p1=2時數字不能和小寫字母一樣處理

**如下

#include

#include

#include

#include

#include

#include

#define n 1000005

using

namespace

std;

char a[n];

int p1,p2,p3;

void deal(char x,char y)

}if(p3==1)//逆序輸出情況

for(int i=1;i<=p;i++)

cout

if(p3==2)

for(int i=p;i>=1;i--)

cout

else

cout

}else

cout

<}

}

865 字串展開

865.字串展開 小趙和小錢在練字,小錢對小趙說 你知道嗎,我練習的字是有蘊含的。小趙不服氣了,憑什麼你的就有蘊含呢?小錢說,你所看到的並不是我真正練習的字,你需要將我現在寫下的字串裡面 和 之間的字重複符號前的那麼多倍,才能看到我真正寫的是什麼。你能幫幫小趙嗎?說明 可能存在巢狀的情況,如 3 g...

35 字串的展開

原題鏈結 總時間限制 1000ms 記憶體限制 65536kb 描述 在初賽普及組的 閱讀程式寫結果 的問題中,我們曾給出乙個字串展開的例子 如果在輸入的字串中,含有類似於 d h 或者 4 8 的字串,我們就把它當作一種簡寫,輸出時,用連續遞增的字母獲數字串替代其中的減號,即,將上面兩個子串分別輸...

NOIP2007 字串展開

字串的展開在初賽普及組的 閱讀程式寫結果 的問題中,我們曾給出乙個字串展開的例子 如果在輸入的字串中,含有類似於 d h 或 4 8 的子串,我們就把它當作一種簡寫,輸出時,用連續遞增的字母或數字串替代其中的減號,即,將上面兩個子串分別輸出為 defgh 和 45678 在本題中,我們通過增加一些引...