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"))