В этом проекте две строки считаются равными, если они обе имеют одинаковое количество вхождений символа «X» и если символ «X» находится в одной и той же позиции в каждой из строк. Обратите внимание, что это позволяет использовать строки разной длины, если в конце более длинной строки нет никаких «X» в дополнительных символах. Мне нужно реализовать эту функцию equals с прототипом функции bool equalsChar(const string& strA, const string& strB, char ch)
.
Примеры
equalsChar( "X", "X", 'X' )
верноequalsChar( "aaaXaaaX", "abcXcbaX", 'X')
верноequalsChar( "XaXbXcX", "XtXoXpXdef", 'X')
верноequalsChar( "XaXbXcX", "XtXoXpXdXf", 'X')
неверноequalsChar( "XXXX", "XX", 'X')
неверноequalsChar( "aXaXbXcX", "XtXoXpX", 'X')
неверно
Мы можем использовать вспомогательные функции, но нам не разрешено выделять дополнительную память (например, не использовать подстроку). Нам нужно работать с индексами при обработке строк.
Я попробовал знания, которые у меня были до сих пор, и искал похожие вопросы на разных веб-сайтах, но это кажется уникальным вопросом.
Вот код:
bool equalsChar(const string& strA, const string& strB, char ch){
int low1=0;
int low2=0;
int high1=strA.length()-1;
int high2=strB.length()-1;
return equalsChar(strA, low1, high1, strB, low2, high2, ch);
}
Я использую перегруженную функцию:
bool equalsChar(const string& strA, int low1, int high1, const string& strB, int low2, int high2, char ch){
int count1=0;
int count2=0;
for(int i=low1; i<=high1; i++){
if(strA[i]==ch)
count1++;
}
for(int j=low2; j<=high2; j++){
if(strB[j]==ch)
count2++;
}
if(count1==0 && count2==0)
return false;
else if(count1!=count2)
return false;
else{
for(int i=low1; i<=high1; i++){
if(strA[i]==ch){
for(int j=low2; j<=high2; j++){
if(strB[j]==ch){
if(i==j)
return true;
}
}
}
}
}
return false;
}
Есть две проблемы:
1. Мне нужно сделать этот код рекурсивно.
2. Я проверяю только первый символ, который равен ch
из strA
и strB
, а затем сравниваю их индексы, а что мне нужно сделать заключается в сравнении всех X в обеих строках.
Он возвращает true для equalsChar( "aaaXaaXa", "abcXcbaX", 'X')
, но должен возвращать false.
char
ровно один раз 11.09.2019