Re: [問題] 如何優化此程式
※ 引述《truesword ( )》之銘言:
: (C語言)
: 以下是今天看到一個問題,主要是在問,怎樣優化一個英文大小寫轉換的函數
: 以下是我憑印象打出來的,如有打錯還請多包涵,但功能就是處理字串大寫轉小寫
: 我想到的做法是利用while判斷字串結尾,以省去strlen()的呼叫
: 除此之外,不知道是否有其他想法呢? 對記憶體空間或是執行速度優化都可以
: 程式如下
: //大寫轉小寫
: void tranform(char *s){
: int i=0;
: for(i; i<strlen(s); i++){
: if(s[i]>'A' && s[i]<'Z'){
: s[i] -= 'A'-'a';
: }
: }
: }
簡單看上去有三個地方可改
1. strlen(s)只要做一遍就好了 現在是for-loop每一次跑一次
2. ++i比i++快
3. 'A' - 'a'只要做一遍就好了
const char c = 'A' = 'a';
const int size = strlen(s);
for (int i = 0; i < size; ++i)
if (s[i] > 'A' && s[i] < 'Z')
s[i] -= c;
有沒有更快 有
當然是建表
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 123.193.87.144
→
03/01 23:18, , 1F
03/01 23:18, 1F
推
03/01 23:26, , 2F
03/01 23:26, 2F
推
03/01 23:26, , 3F
03/01 23:26, 3F
→
03/01 23:27, , 4F
03/01 23:27, 4F
→
03/01 23:28, , 5F
03/01 23:28, 5F
→
03/01 23:29, , 6F
03/01 23:29, 6F
→
03/01 23:35, , 7F
03/01 23:35, 7F
→
03/01 23:56, , 8F
03/01 23:56, 8F
→
03/01 23:57, , 9F
03/01 23:57, 9F
推
03/02 00:50, , 10F
03/02 00:50, 10F
推
03/02 14:19, , 11F
03/02 14:19, 11F
推
03/02 14:39, , 12F
03/02 14:39, 12F
→
03/02 14:40, , 13F
03/02 14:40, 13F
討論串 (同標題文章)