Ваша программа (правильно) проверяет, содержат ли первая половина и вторая половина строки одинаковый набор символов (игнорируя средний). В этом смысле первая группа выходов (ДА НЕТ ДА ДА НЕТ НЕТ) представляется правильной.
Если вы добавите выходные данные строк, которыми заканчивается программа, вы увидите, что идет не так: https://ideone.com/ap422m
if(str1==str2)
cout<<"YES " << str1 << "|" << str2 <<endl;
else
cout<<"NO " << str1 << "|" << str2 <<endl;
Выход:
YES |
YES ag|ag
NO ab|de
YES or|or
YES xy|xy
NO abb|aab
Таким образом, он выполняет правильные проверки, но читает начальную строку, заканчивающуюся как первый ввод. Я бы просто использовал getline(cin, str);
в начале, как вы делаете это позже, чтобы этого не произошло.