AutoLisp 返回字符串中某一子串首次出现的位置的函数

 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

AutoLisp 返回字符串中某一子串首次出现的位置的函数的相关文章

字符数组-返回字符串中的某个子串的开始位置,不使用string头文件-C

简单的来讲就是把字符串进行比较,从第一个相同的位置开始,之后逐个比对,直到不相同为止,此时比较相同字符数目与子串长度的关系,相同则返回第一个相同位置,否则返回-1 1 #include<stdio.h> 2 3 int find_substr(char *mainstr,char *substr); 4 5 int main(void) 6 { 7 if(find_substr("C is fun!","is")==-1) 8 { 9 printf(&q

获取两个字符串中最大相同子串

2.获取两个字符串中最大相同子串.第一个动作:将短的那个串进行长度一次递减的子串打印. "cvhellobnmtanop" "andefc" 思路: 1,将短的那个子串按照长度递减的方式获取到. 2,将每获取到的子串去长串中判断是否包含,如果包含,已经找到! package tan; class Test { public static String getMaxSubString(String s1,String s2) { String max = "

HDU 4622 求解区间字符串中的不同子串的个数

题目大意: 给定一个长度<2000的串,再给最多可达10000的询问区间,求解区间字符串中的不同子串的个数 这里先考虑求解一整个字符串的所有不同子串的方法 对于后缀自动机来说,我们动态往里添加一个字符,每次添加一个字符进去,我们只考虑那个生成的长度为当前长度的后缀自动机的节点 那么这个节点可接收的字符串的个数就是( p->l - p->f->l ),也就是以当前点为最后节点所能得到的与之前不重复的子串的个数 那么这个问题就很好解决了,共2000个位置,以每一个位置为起点构建一次后缀

【C语言】模拟实现strchr函数.即在一个字符串中查找一个字符第一次出现的位置并返回

//模拟实现strchr函数.即在一个字符串中查找一个字符第一次出现的位置并返回 #include <stdio.h> //#include <string.h> #include <assert.h> char* my_strchr(char *dst, char src) { assert(dst); while (*dst != '\0') { if (*dst == src) return dst; dst++; } return 0; } int main()

[email&#160;protected]返回字符串中出现次数最多的那个字符和次数2

1 <!DOCTYPE html> 2 <html> 3 <head lang="en"> 4 <meta charset="UTF-8"> 5 <title>@返回字符串中出现次数最多的那个字符和次数2</title> 6 7 </head> 8 <body> 9 </body> 10 11 <script type="text/javasc

【c语言】模拟实现strchr函数,功能:在一个字符串中查找一个字符第一次出现的位置,如果没有出现返回NULL

// 模拟实现strchr函数,功能:在一个字符串中查找一个字符第一次出现的位置,如果没有出现返回NULL #include <stdio.h> #include <assert.h> char const* my_strchr(char const *p,char c) { assert(p != NULL); while (*p) { if (*p == c) return p; else p++; } return NULL; } int main() { char *p =

查找字符串中最长子串

查找字符串中最长子串,例如“I love OC”最长子串为“love” 1 void findMaxLengthSubstr1(char *src) 2 { 3 char *start = src; 4 char *end = src; 5 unsigned int maxLength = 0; 6 unsigned int tempLength = 0; 7 // 此处子串长度不能超过100 8 char maxStr[100] = "0"; 9 10 if (src == NULL

黑马程序员——找出两个字符串中最大的子串

找出两个字符串中最大的子串 </pre><pre name="code" class="java">public class StringMaxString { //找一个字符串的最大子串 public static void main(String[] args) { // TODO Auto-generated method stub String s1="qwerabcdtyuiop"; String s2=&quo

[算法]将字符串中的*前置,非*字符相对位置不变

如ab**cd*e12变成 ****abcde12 char* foo(char* str, int length){ int i = length-1,j = length-1; while(i >= 0 && j >= 0){ while(i >= 0 && '*' != str[i]){ --i; } j = i - 1; while(j >= 0 && '*' == str[j]){ --j; } if(j >= 0){