這是乙個很單純的字串替換的題,不涉及特殊輸出格式,這裡c可以用getchar()
輸入並記錄長度,c++使用string
標頭檔案的getline()
即可,**分別如下:
//c style
#include..
.char s[
1100];
char t;
//temp,表臨時變數
int cnt=0;
//count,表計數變數
while
((t=
getchar()
)!='\n'
)s[cnt++
]=t;
//注意這句的括號位置(用來調整運算優先順序),判斷條件,自加運算子的用法
這裡要注意將字串陣列開大一點,省去宣告陣列長度的麻煩
//cpp style
#include
#include
using
namespace std;..
.string s;
getline
(cin,s)
;//理解輸入流作為函式引數
然後重點是判斷並處理連續6的情況。
這裡要注意先處理轉換成27的情況,再處理轉換成9的情況。否則,本應轉換成27的序列會變成至少3個"9"和不多於4個"6"的序列,這個處理起來就挺繁瑣的。
再想到,如果轉換發生,一串較長的"6"會變短,整個字串陣列的長度就減少了,那麼被縮短的部分要變成什麼呢?
具體地,考慮這時候我們想到,只要在s[i,i+9]="66666666"
,轉換後子串變為s[i,i+1]="9"
,那麼s[i+1,i+9]
該怎麼辦呢?
s[i+1,i+9]
上做個標記,當遇到這個標記時,不輸出就可以了。
考慮到輸入的字串不可能出現控制字元(即ascii碼表中的編碼為0-32的字元),我們將s[i+1,i+9]
設定為0
(注意不是字元"0"
),具體**如下
//c style
#include
intmain
(void
)else
if(len>3)
s[j-len]
='9'
len=0;
//重置序列長度
}for
(int i=
0;i(s[j]
)printf
("%c"
,s[j]);
return0;
}
事實上,使用c++的regex
庫,通過正規表示式寫出來的**思路更加自然:
#include
#include
#include
using
namespace std;
intmain
(void)"
),pattern2
("6");
s=regex_replace
(s,pattern2,
"27");
s=regex_replace
(s,pattern,
"9")
; cout<
return0;
}
正規表示式以後再講。 禪者的初心
高一那年,接觸到了 賈伯斯傳 其中有一部分內容提到了賈伯斯去印度進行冥想和禪修,並希望以此來解決心中疑問。如今五年過去了,依然思索著如何才能讓自己認識自己,或者如何才能從冥想中提公升自己的認知能力。同樣的環境,同樣的任務,不同的人去完成任務,為什麼他們有的人倍感壓力,有的人坦然接受並完成任務?初心,...
李善友 用師者王, 用友者霸, 用徒者亡
近日,跟乙個朋友交流關於公司人才結構的問題,他提出乙個 人才結構abc 和 cba 的概念,使我收益良多,震動頗大。枉為自己從事hr多年,但對人才結構真髓的理解上,還差得很多很多。乙個人在招聘自己下屬的時候,即使明確地要求自己招聘 能人 但是他的潛意識卻是去招聘在能力結構和背景方面跟自己很象的人,同...
Python初心者自學的一些常見正則匹配
匹配任意郵箱 content baomin vrp.live content re.search r w w a za z content w 匹配4 20個字母數字以及下劃線,後面同理 a za z 匹配1 4個大小寫字母,表示以前面的內容為結尾 tip 開頭的r表明 不是轉義字元 匹配任意至少1...