#include <iostream>
#include <string>
bool hasChar(const char* s, char c)
{
if (*s == '\0') {
return false;
}
if (*s == c) {
return true;
}
return hasChar(s + 1, c);
}
bool equalsChar(const char* strA, const char* strB, char ch)
{
if (*strA == '\0') {
return !hasChar(strB, ch);
} else if (*strB == '\0') {
return !hasChar(strA, ch);
}
if (*strA != *strB && (*strA == ch || *strB == ch)) {
return false;
}
return equalsChar(strA + 1, strB + 1, ch);
}
bool equalsChar(const std::string& strA, const std::string& strB, char ch){
return equalsChar(strA.c_str(), strB.c_str(), ch);
}
void Test(const std::string& s1, const std::string& s2, char c, bool expected)
{
std::cout << s1 << (expected ? " == " : " != ") << s2
<< (expected == equalsChar(s1, s2, c) ? " OK" : " KO") << std::endl;
}
int main()
{
Test("X", "X", 'X', true);
Test("aaaXaaaX", "abcXcbaX", 'X', true);
Test("XaXbXcX", "XtXoXpXdef", 'X', true);
Test("XaXbXcX", "XtXoXpXdXf", 'X', false);
Test("XXXX", "XX", 'X', false);
Test("aXaXbXcX", "XtXoXpX", 'X', false);
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgoKYm9vbCBoYXNDaGFyKGNvbnN0IGNoYXIqIHMsIGNoYXIgYykKewogICAgaWYgKCpzID09ICdcMCcpIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICBpZiAoKnMgPT0gYykgewogICAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgcmV0dXJuIGhhc0NoYXIocyArIDEsIGMpOwp9Cgpib29sIGVxdWFsc0NoYXIoY29uc3QgY2hhciogc3RyQSwgY29uc3QgY2hhciogc3RyQiwgY2hhciBjaCkKewogICAgaWYgKCpzdHJBID09ICdcMCcpIHsKICAgICAgICByZXR1cm4gIWhhc0NoYXIoc3RyQiwgY2gpOwogICAgfSBlbHNlIGlmICgqc3RyQiA9PSAnXDAnKSB7CiAgICAgICAgcmV0dXJuICFoYXNDaGFyKHN0ckEsIGNoKTsKICAgIH0KICAgIGlmICgqc3RyQSAhPSAqc3RyQiAmJiAoKnN0ckEgPT0gY2ggfHwgKnN0ckIgPT0gY2gpKSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOyAgIAogICAgfQogICAgcmV0dXJuIGVxdWFsc0NoYXIoc3RyQSArIDEsIHN0ckIgKyAxLCBjaCk7Cn0KCmJvb2wgZXF1YWxzQ2hhcihjb25zdCBzdGQ6OnN0cmluZyYgc3RyQSwgY29uc3Qgc3RkOjpzdHJpbmcmIHN0ckIsIGNoYXIgY2gpewogICByZXR1cm4gZXF1YWxzQ2hhcihzdHJBLmNfc3RyKCksIHN0ckIuY19zdHIoKSwgY2gpOwp9Cgp2b2lkIFRlc3QoY29uc3Qgc3RkOjpzdHJpbmcmIHMxLCBjb25zdCBzdGQ6OnN0cmluZyYgczIsIGNoYXIgYywgYm9vbCBleHBlY3RlZCkKewogICAgc3RkOjpjb3V0IDw8IHMxIDw8IChleHBlY3RlZCA/ICIgPT0gIiA6ICIgIT0gIikgPDwgczIKICAgICAgICAgICAgICA8PCAoZXhwZWN0ZWQgPT0gZXF1YWxzQ2hhcihzMSwgczIsIGMpID8gIiBPSyIgOiAiIEtPIikgPDwgc3RkOjplbmRsOwp9CgppbnQgbWFpbigpCnsKICAgIFRlc3QoIlgiLCAiWCIsICdYJywgdHJ1ZSk7CiAgICBUZXN0KCJhYWFYYWFhWCIsICJhYmNYY2JhWCIsICdYJywgdHJ1ZSk7CiAgICBUZXN0KCJYYVhiWGNYIiwgIlh0WG9YcFhkZWYiLCAnWCcsIHRydWUpOwogICAgVGVzdCgiWGFYYlhjWCIsICJYdFhvWHBYZFhmIiwgJ1gnLCBmYWxzZSk7CiAgICBUZXN0KCJYWFhYIiwgIlhYIiwgJ1gnLCBmYWxzZSk7CiAgICBUZXN0KCJhWGFYYlhjWCIsICJYdFhvWHBYIiwgJ1gnLCBmYWxzZSk7Cn0=