1 ;返回字符串中某一子串首次出现的位置 2 (defun my_strstr(mstr zstr / retu) 3 (setq mstr_l (strlen mstr) zstr_l (strlen zstr)) 4 (if (<= zstr_l mstr_l) 5 ;主字符串长度大于或等于子字符长度 6 (progn 7 (setq i 1) 8 (setq tc_w1 T) ;退出循环时使用 9 (setq ppqk nil) ;表示匹配情况 10 (while (and tc_w1 (<= i (+ 1 (- mstr_l zstr_l)))) 11 (setq j 1) 12 (setq tc_w2 T) ;退出循环时使用 13 14 ;对子串的每一个字符逐一比较 15 (while (and tc_w2 (<= j zstr_l)) 16 (if (= (substr mstr (+ i (- j 1)) 1) (substr zstr j 1)) 17 (setq j (+ j 1)) 18 (setq tc_w2 nil) 19 20 ) 21 ) 22 (if (= j (+ 1 zstr_l)) 23 (progn (setq tc_w1 nil ppqk i)) 24 (setq i (+ 1 i)) 25 ) 26 27 ) 28 (setq retu ppqk) 29 30 ) 31 32 ;否则 33 (setq retu nil) 34 35 ) 36 37 ) 38 39 40 (print (strstr "ABCDEFG" "EFG"))
时间: 2024-10-12 20:01:13