為什麼很多人把strlen 寫進迴圈條件裡?

時間 2021-05-06 04:42:43

1樓:嵌入式Linux

for(inti=

0;i<

strlen

(str);i

++)和int

len=

strlen

(str

);for

(inti=

0;i<

len;i++

)從CPU角度出發,明顯第二種會好很多,畢竟第二種寫法替CPU考慮問題了,讓CPU少幹活了。

2樓:godweiyang

我一般這麼寫:

for(

inti=0

,sz=strlen

(str);i

++i)

3樓:Flutana Variata

可能他只想秀一下自己寫的 pcmpeqb + ptest(sse4_1), pcmpestri(sse4_2)的優化strlen

才會寫的這麼刻意

4樓:ManInNet

因為懶。省得再回頂部再定義乙個整數如 int j 之類。

其次是可以少一行 j=strlen(s)。使程式看起來更精簡。

某段時間,寫得精簡是程式設計師功力的指標。不良作風就如此形成。

5樓:sumover

我推薦這麼寫

for(

inti=0

,len

=strlen

(str);i

)看到下面有個老哥說會有潛在的warning好說for

(unsigned

inti=0

,len

=strlen

(str);i

6樓:Dyxx

我在很早就學了string, vector的size函式,以為strlen的複雜度和size是一樣的O(1)

直到乙個TLE調了我兩個小時我才開始思考這兩個函式是怎麼實現的

7樓:

gcc的-O2優化,strlen是O(1)複雜度,執行期才獲取的字串也一樣,不知道是什麼原理。。不信的可以自己計時測一下

8樓:黎黎黎

for(unsigned int i =0 , len = strlength(str) ; ilogger(&str[i]);

9樓:xcc

學好c/cpp的關鍵因素是學好編譯,編譯有個優化叫loop invariant hoisting,如果編譯器可證明你的字串長度在迴圈體內不變的話,會把他拿到外面。

好多人以為C快,其實不是你寫的多好,是編譯器幫了你多大的忙決定的。

10樓:

這個是挨個看字元直到找到\0,一定糾結效率問題可以考慮直接判斷當前序號指向的是不是\0

如果是python或者vc,不用糾結這個事,gcc好像判斷不到迴圈內部。所以應該是不提供優化的(推定。畢竟如果迴圈內部改了字串長度,它再優化就出事情了)

11樓:

這個不僅僅有複雜度的問題

更重要的是strlen的返回值是size_t型別會有乙個隱蔽的型別轉換

上次害的我修了20分鐘bug。。。

12樓:pansz

確實是會影響效能的,但其他方式也有各自的問題。

intlen

=strlen

(str

);for

(inti=

0;i

)這個寫法的問題在於 strlen 的返回值是 size_t,存在潛在的型別轉換,多了乙個warning

如果這樣呢?

for(

inti

=strlen

(str);i

--;)這個寫法無疑是高效的,但它會使迴圈元素的次序改變,很可能不滿足需求。

實際上並沒有必要過於糾結這個問題。畢竟現代語言對字串的處理已經不像 C 語言這樣了。

C 語言沒有真正意義上的字串物件,僅僅只是把乙個指標勉強當作字串。那麼在操作過程中總會存在一些問題,例如字串比較以及求長度等等。

其它程式語言中,當字串是乙個真正的物件的時候,求字串長度可以是常數複雜度,你擔心的問題就不存在了。

13樓:碎月蒼瀾

提乙個特殊視角吧,如果對str有操作,導致str長度變話,可能這麼寫會省一些事情,但是這種寫法有可能會導致不可預期的後果,尤其i做下標的情況下。

為什麼很多人把黃家駒視為偶像?

無限可能 有時候我真的覺得很驚嘆於他對這個世界的感悟,如此年輕卻對人生 對世界有這麼深刻的理解,對和平的嚮往,他的博愛,對理想的不屑追求等等都超越了他那個年齡該有的理解能力,所以說他的才華毋庸置疑,人們愛他的才 愛他的人格魅力! 最南端海島 他唱歌不帶耳返,顯示自信 他的歌曲包含和平,祖國,夢想,理...

為什麼很多人把程心稱作聖母?

程心不是聖母,她是道德上的自私者。她行為上的錯誤,用冬眠來逃避,她每一次選擇,都是其他人用生命程序來彌補。羅輯 章北海 維德等,他們才是人類的救世主,是人類的大愛。他們承受了一生無法救贖的罪惡,天堂留給人類,地獄他們欣然進往。程心不是聖母,她是自私的,直到這本書的末尾,依然認為她是將人類在 溫情 中...

為什麼現在很多人把抑鬱當潮流?

叮叮噹噹咚咚嗆嗆 有嘛?我覺得現在社會中的年輕人可能真的有些抑鬱吧,面臨各種壓力,表面快樂,背後悲傷,有些東西是說不出來的,只能自己承受,不一定哪一天哪一件事就成了壓垮駱駝的最後一根稻草 筵席相逢 簡單回答一下 有兩種一,是真的有抑鬱症的患者。抑鬱症患者近年的大量出現有兩個原因。第乙個原因,是你之前...