2015-06-12 6 views
0

Стараюсь со следующим кодом, чтобы проверить, если строка содержит определенные символы, но я хочу, чтобы проверить, если это символы в порядке, как этот мой кодПроверьте, если строка содержит определенные символы порядка

string string1= "Amed"; 
string string2= "Anbhsmegfd"; 
std::string x(string1); 
if (x.find_first_not_of(string2) != std::string::npos) 
{ 
    std::cerr << "Error\n"; 
} 

в моей проверки кода если строка содержит символы, которые дают строку1, но я хочу, чтобы проверить, если найти этот символ в порядке пути в качестве примера

string1 ="Amed"; 
string2= "Aehdkm" 

string1 найдено в ТАБЛИЦЕ2
, но мне нужно на выходе будет б e error, потому что e перед m как я могу это сделать?

+0

Динамическое программирование будет работать. Или рекурсивный обратный признак по символу на меньшей строке. – twentylemon

+0

На самом деле строка1 не находится в строке2 в последнем. – traveh

+0

@traveh updated – mbugr

ответ

1

Что-то вроде этой работы для вас?

string s1 = "Amed"; 
string s2 = "Aehkm"; 
size_t k = 0; 
for (size_t i = 0; i < s2.size(); ++i) 
    if (s1[k] == s2[i]) { 
     k++; 
     if (k == s1.size()) { 
      cout << "found" << endl; 
      break; 
     } 
    } 
+0

решить только некоторые случаи, если string1 = "Ahmed" и string2 = "ehAmAhmsed" не найдено, но string2 содержит string1 в порядке! – mbugr

+0

@AhmedElzeiny Я просто попробовал, он говорит «нашел». (Вы можете печатать 'i' каждый раз, когда' k' увеличивается, чтобы увидеть, что произойдет.) – AlexD

1

просто написать code.Here является псевдо-код, я оставляю вам преобразовать в C++

char* s = str2 
foreach (char c in str1) 
    char *find = indexof(s, c) 
    if(!find) 
     error; 
    s = find 

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

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