回 帖 发 新 帖 刷新版面

主题:字符串问题

输入二个字符串,求出它们的最长公共子串,字符串长度不超255。
如:由键盘依次输入二个字符串为
What is local bus?
Name some local buses.
则最长公共子串为"local bus"

回复列表 (共9个回复)

沙发

INPUT a$
INPUT b$
IF a$ < b$ THEN SWAP a$, b$
l = LEN(b$)
FOR q = l TO 1 STEP -1
FOR c = 1 TO l + 1 - q
x$ = MID$(b$, c, q)
IF INSTR(1, a$, x$) <> 0 THEN PRINT x$: END
NEXT
NEXT
END

板凳

正解

3 楼

CLS
INPUT a$,b$
IF LEN(a$)>LEN(b$) THEN SWAP a$,b$\
s$=""
FOR i=1 TO LEN(a$)
    FOR j=1 TO LEN(a$)+1-i
        t$=MID$(a$,i,j)
        IF INSTR(b$,t$)>0 AND LEN(t$)>LEN(s$) THEN s$=t$
NEXT j,i
PRINT s$
END

4 楼

我只说说我的做法,
至于你们的程序是否凑效,自己上机验证一下.
至于怎样更有效的搜索与加快速度,应该去研究一下,对你们学习有帮助.

input a$
input b$
If Len(b$) < Len(a$) Then swap a$,b$
For i = 1 To Len(a$)
    c$ = Mid$(a$, i, 1)
    d = 0
    Do
       d = InStr(d + 1, b$, c$)
       If d = 0 Then Exit Do
       For j = 1 To Len(a$) - i
           If Mid$(a$, i + j, 1) <> Mid$(b$, d + j, 1) Then Exit For
       Next
       If j > Len(m$) Then m$ = Mid$(a$, i, j)
    Loop
Next
Print m$

5 楼

INPUT a$
INPUT b$
IF a$ < b$ THEN SWAP a$, b$
l = LEN(b$)
FOR q = l TO 1 STEP -1
FOR c = 1 TO l + 1 - q
x$ = MID$(b$, c, q)
IF INSTR(1, a$, x$) <> 0 THEN PRINT x$: END
NEXT
NEXT
END

6 楼

不要用这种办法直接向IDC_EDITx发送按键消息

7 楼

不要用这种办法直接向IDC_EDITx发送按键消息

8 楼

INPUT a$
INPUT b$
IF a$ < b$ THEN SWAP a$, b$
l = LEN(b$)
FOR q = l TO 1 STEP -1
FOR c = 1 TO l + 1 - q
x$ = MID$(b$, c, q)
IF INSTR(1, a$, x$) <> 0 THEN PRINT x$: END
NEXT
NEXT
END

9 楼

NEXT a$
NEXT b$

我来回复

您尚未登录,请登录后再回复。点此登录或注册