|
|||||||
|
|
|
![]() |
|
|
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: 18:02.



















