Вы не инициализируете вектор символа и, следовательно, вероятно, сравниваете много мусора, из-за которого он расходится и составляет 0.
Обратите внимание, что из-за этого он всегда ломает while
, иначе он зависнет там, когда вы передаете середину копией и никогда не меняете ее, что делает его всегда больше 0.
Вам лучше заменить циклы for
для создания подстрок вызовами substr()
и while
для if
:
#include<iostream>
#include<conio.h>
#include<stdio.h>
#include<string.h>
using namespace std;
int count=0;
void sym(int n,string a)
{
int mid=(n)/2;
string ch1 = a.substr(0, mid - 1);
string ch2 = a.substr(mid, npos);
if (mid != 0 && ch1.compare(ch2) == 0)
{
count++;
sym(mid, a);
}
}
int main()
{
int n;
string a;
cout<<"Enter the Size of 2^n : ";
cin>>n;
cout<<"Enter the String : ";
cin>>a;
cout<<a<<endl;
sym(n,a);
cout<<count;
return 0;
}