Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    182

    [c++] tasselli uguali (ricorsivamente)

    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?

  2. #2
    Utente di HTML.it L'avatar di Donis
    Registrato dal
    Jan 2012
    Messaggi
    16
    - Sembra funzionare se sostituisco if(strcmp(S[i],S[j])!=0) con if(S[i]!=S[j])

    ma in strcmp ci vanno dei vettori di caratteri, non dei caratteri, a me daa errore se inserisco dei caratteri e dice "impossibile convertire parametro 1 da 'char' a 'const char*'... penso sia per questo che non funziona...

  3. #3
    Utente bannato
    Registrato dal
    Oct 2010
    Messaggi
    1,219
    Non ti conviene usare le stringhe in stile C, c'è la classe string con cli operatori =, ==,+= e [] in overloading, se hai una stringa:

    codice:
    string a="ciao";
    string b="ciao";
    cout<<(a==b)<<endl;
    cout << a[0]; // stampa 'c'
    Puoi usare tutti questi operatori ed anche molti altri.

  4. #4
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    182
    Lo so che string è migliore..ma nn posso usaper l esame che sto preparando..
    Non ho capito in che senso strcmp funziona con array di caratteri? Perché dá quell errore? Alla fine io confronto lo stesso ma con indici diversi..

  5. #5
    Utente bannato
    Registrato dal
    Oct 2010
    Messaggi
    1,219
    strcmp prende come argomenti due puntatori a char.
    Se vuoi valutare solo una sottostringa non puoi passargli un singolo carattere:

    codice:
    char a[]="ciao";
    strcmp(a[1],"iao"); 
    // sbagliato, s[1] non è un puntatore a char
    Ma gli passi il suo indirizzo:

    codice:
    strcmp(&s[1],"iao");

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.