Ho provato a svolgere il seguente esercizio:
scrivere una funzione ricorsiva che ricevuta una stringa verifichi se essa è formata da due tasselli uguali. Esempio: "caracara", "ciaociao", "cici"...mentre sono diversi ad esempio in: "caracasa", "ciaocia" ecc...
codice:
#include <iostream>
#include <cstring>
using namespace std;
bool tasselliuguali(char *S, int n, int i, int j);
int main(){
int n=4;
int i=0, j=n;
char S[]={"ciaociao"};
if(tasselliuguali(S,n,i,j))
cout<<"ok"<<endl;
else cout<<"no"<<endl;
system("pause");
return 0;
}
bool tasselliuguali(char *S, int n, int i, int j){
if(strlen(S)% n != 0)
return false;
if(i >=n-1 && j >= n+n)
return true;
if(strcmp(S[i],S[j])!=0) //cosi non funzione ma se faccio if(S[i]!=S[j]) SI!
return false;
return tasselliuguali(S, n, ++i, ++j);
}
Sembra funzionare se sostituisco if(strcmp(S[i],S[j])!=0) con if(S[i]!=S[j])
come mai?? Non dovrebbero essere equivalenti? strcmp dovrebbe restituire 0 se le due stringhe sono uguali...e 1 o -1 se sono diverse vero?cosa sbaglio?