6翻了 初心者用

2021-10-25 01:18:22 字數 1974 閱讀 8387

這是乙個很單純的字串替換的題,不涉及特殊輸出格式,這裡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...