Openjudge 1 7 35 字串的展開

2021-07-27 14:47:29 字數 1719 閱讀 5083

描述

在初賽普及組的「閱讀程式寫結果」的問題中,我們曾給出乙個字串展開的例子:如果在輸入的字串中,含有類似於「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行為一行字串,僅由數字、小寫字母和減號「-」組成。行首和行末均無空格。

40%的資料滿足:字串長度不超過5;

100%的資料滿足:1<=p1<=3,1<=p2<=8,1<=p3<=2。字串長度不超過100。

輸出

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

題目分析:

此題可以使用「string」型別的字串,注意加上「using namespace std;」。另外有三個引數,p1有三種情況,為第一輸出條件,建議使用「switch」分類討論;p2控制輸出,用「for」迴圈控制,為第三輸出條件;p3有兩種情況,為第二輸出條件,建議用「if」,「else」分類討論,另外由於p1=3時,只輸出「*」,此情況可以不討論p3的值。在展開之前,我們需要判斷是否能夠展開,即兩邊都是字母或兩邊都是數字,並且左邊大於右邊

程式樣例:

#include#include#includeusing namespace std;

int main()

break;

case 2:

if('a'<=ch[i-1] && ch[i-1]<='z') //此時需要判斷是否為字母的展開}}

else

}break;

case 3: //只輸出*,不討論p3

for(int m=ch[i-1]+1;m

OpenJudge09 字元菱形

1.1程式設計基礎之輸入輸出 09 字元菱形 總時間限制 1000ms 記憶體限制 65536kb 描述給定乙個字元,用它構造乙個對角線長5個字元,傾斜放置的菱形。輸入 輸入只有一行,包含乙個字元。輸出 該字元構成的菱形。樣例輸入 樣例輸出 實現 1 尋找規律 include define n 5 ...

38 字元中的唯一字元

原題目 給定乙個字串,找到它的第乙個不重複的字元,並返回它的索引。如果不存在,則返回 1。示例 s leetcode 返回 0 s loveleetcode 返回 2 思路 用for迴圈遍歷每乙個元素,然後用find函式從前到後尋找這個元素並返回這個元素所在的位置,用rfind從後到錢尋找這個元素並...

021 字元陣列

021 字元陣列 以字元陣列為基礎做簡單的文版編輯器,該程式出入文字行直至遇到 乙個空行為止,而後每次乙個字元重新顯示各行。出語言精彩程式設計百例 第21 include define max 100 define len 80 void main char text max len registe...