2013-06-07 5 views
1

Я пытаюсь проверить, содержит ли строка элементы из разных строк в определенном порядке.Проверьте, содержит ли строка другие строковые элементы

Например:

большая строка: thisisstring

небольшую строку: HSSG

он должен вернуть истинный.

Я только выяснил, как проверить, содержит ли строка целую другую строку, но не части. Это код, который я написал для проверки на данный момент:

if ([largestring rangeOfString:smallstring].location != NSNotFound) { 
    printf("contains"); 
} 
+0

но что делать, если между буквами маленькой строки есть буквы. как thisisstring и hssg пример – user2331875

ответ

2

Там нет простого способа сделать это, по крайней мере, не построена в пути, что я знаю. Вам нужно будет проходить через каждую букву вашей маленькой строки и найти первую букву, соответствующую вашей большой строке.

Каждый раз, когда вы находите соответствующее письмо, вы выполняете цикл до следующей строки маленькой строки, но вместо этого начинаете поиск по индексу после того, как нашли предыдущую букву.

EDIT: некоторые псевдо код, непроверенных, могут иметь синтаксические ошибки:

int foundChar = 0; 
for (int l = 0; l < strlen(smallstring); l++) 
{ 
    bool found = false; 
    for (; foundChar < strlen(largestring); foundChar++) 
    { 
    if (smallstring[l] == largestring[foundChar]) 
    { 
     // We break here because we found a matching letter. 
     // Notice that foundChar is still in scope so we preserve 
     // its value for the next check. 
     found = true; 
     foundChar++; // Increment so the next search starts with the next letter. 
     break; 
    } 
    } 
    // If we get down here, that means we've searched all of the letters 
    // and found no match, we can result with a failure to find the match. 
    if (found == false) 
    { 
    return false; 
    } 
} 

// If we get here, it means every loop resulted in a valid match. 
return true; 
+0

проверит его. благодаря! – user2331875

5
  1. Если нет больше символов для поиска из маленькой строки, возвращает истину.
  2. Начиная с позиции после последнего найденного символа в большой строке, выполните линейный поиск первого символа из маленькой строки, которая еще не была найдена.
  3. Если символ не найден, верните false.
  4. Начало в 1.
+0

это выглядит как интересная идея. попытается скопировать его сейчас – user2331875

Смежные вопросы