2016-04-29 1 views
1

Я новичок в программировании и хотел бы спросить, могу ли я разделить строку ниже. Я использую Visual Basic. В принципе у меня есть две строк ниже:Отделите новую строку, в которой новая строка содержит строку в старой строке

Строки 1: gOldStr = TEDDYBEARBLACKCAT

Строка 2 = gNewStr = BLACKCATWHITECAT

Я хотел отделяться строка 2, посмотрев точное значение в строках 1

так что у меня есть sTRING2, что является частью строки 1 = BlackCat

строка 2, что новый = WhiteCat

Я пробовал сценарий ниже, но он не работает все время. Могли бы предложить мне лучшую логику? Thanks2

For i=1 to Len(gOldStr) 
     TempStr = Left$(gNewStr,i) 
     Ctr1 = InStr(gOldStr, TempStr) 
     gTemporary = Mid$(gOldStr,Ctr1) 

     gTemporary = Trim(gTemporary) 

     Ctr2 = StrComp(gOldStr, gTemporary) 
     If Ctr2=1 Then 
       gTemporary2 = Replace(gNewStr,gTemporary,"") 
       Exit For 
     End If 
Next i 
+1

Добро пожаловать в Stackoverflow. Использование 'InStr' будет искать« TEDDYBEARBLACKCAT »для« BLACKCATWHITECAT ». Вам нужно будет отделить слова в String1, а затем поместить слова в «Array» или иметь отдельные строки для каждого условия поиска. –

+0

Привет, Жан, Спасибо за ур. Фактически, когда я пытался сделать Ctr1 = InStr (gOldStr, gNewStr), он вернет меня с 0-позицией. Хотя я также не могу разделить слова вручную, так как оба данных вводятся пользователем. – Nopio

+0

@nopio Это дает вам 0, потому что InStr проверяет, находится ли весь gNewStr внутри gOldStr, что не потому, что они не совсем одинаковы. См. Мой ответ ниже, хотя ... – ib11

ответ

0

Если общая часть всегда в конце первого и в начале 2-го один, вы могли бы смотреть с конца, как это:

Dim strMatchedWord As String 
For i=1 to Len(gOldStr) 
    If i>Len(gNewStr) Then Exit For 'We need this to avoid an error 
    Test1 = Right$(gOldStr, i) 
    Test2 = Left$(gNewStr, i) 

    If Test1 = Test2 Then 
     strMatchedWord = Test1  'Store your match is Test1 
    End If 
Next 
Debug.Print strMatchedWord 'Once the loop finishes it contains the longest match 

Я модифицировал чтобы цикл не выходил, пока он не прошел полную строку. Таким образом, вы получите самое длинное совпадение к концу цикла.

+0

Привет @ ib11 спасибо за ввод ur, да, это тоже работает. но я думаю, что если строка имеет повторяющийся характер, этот метод также не получит правильную строку. Пример: Строка 1: AAADEFDEF String 2: DEFDEFJJJWWW – Nopio

+0

Хорошо. Я обновил код. Теперь он проходит через всю строку, и если он находит совпадение, он сохраняет его, поэтому к концу у вас самый длинный. – ib11

+0

привет @ ib11 спасибо, он отлично работает. Большое спасибо. – Nopio