|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Mar 2011
Messaggi: 1050
|
[C++] tasselli uguali in char
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); } 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? |
![]() |
![]() |
![]() |
#2 |
Member
Iscritto dal: Jan 2009
Messaggi: 30
|
Passare alla funzione anche tre valori di tipo int è inutile.
Così come appesantisce inutilmente il codice usare funzioni che si usavano tipicamente con la libreria <string.h> in C, quando ora per C++ è disponibile la libreria <string> Sfrutta la funzione SIZE, della libreria <string>. Codice:
#include <iostream> #include <string> using namespace std; bool TasselliUguali (string s); int main() { string t; cout << "Inserire una stringa: "; cin >> t; if(TasselliUguali(t)) cout << "La stringa e' formata da due tasselli uguali" << endl; else cout << "La stringa non e' formata da due tasselli uguali" << endl; return 0; } bool TasselliUguali (string s) { if( (s.size() % 2) != 0) return false; unsigned half_string = s.size() / 2; for(unsigned i=0; i < half_string; i++) if(s[i] != s[i + half_string]) return false; return true; } |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 04:32.