+ Rispondi al Thread
Visualizzazione dei risultati da 1 a 6 su 6

Discussione: [c++] parola palindroma

  1. #1
    ellosma non è in linea Novello
    Post
    9

    [c++] parola palindroma

    Ho creato un array di char e ho provato a memorizzarlo in due stringhe , avanti e indietro. ora vorrei confrontare queste stringhe per vedere se sono uguali. in tal caso dovrebbe uscire come output "PALINDROMA". la prima parte fa esattamente quello che volevo, ma al momento del confronto sbaglia. potreste aiutarmi attenendovi , nel caso ci sia ovviamente qualcosa di logico , al livello di codice che ho utilizzato. so che in rete ci sono miliardi di programmi che fanno la stessa cosa e sicuramente migliori, ma vorrei cercare di imparare dalle basi e secondo la mia logica, anche se a volte contorta
    codice:
    #include "stdafx.h"
    #include <iostream>
    using std::cout;
    using std::cin;
    using std::endl;
    #include <string>
    using std::string;
    
    int main()
    {
    	char parola[100];
    	string avanti[100];
    	string indietro[100];
    	
    
    	cout << " Inserire parola : ";
    	cin >> parola;
    
    	for (int i = 0; i <= strlen(parola) ; i++) {
    
    		avanti[i] = parola[i];
    		cout << avanti[i];
    
    	}
    
    	cout << '\n';
    
    	for (int i = (strlen(parola) - 1); i >= 0; i--) {
    
    		// non posso scrivere strlen perche' riguarda i char 
    
    		indietro[i] = parola[i];
    		cout << indietro[i];
    	}
    
    	cout << '\n';
    
    	// converti array in stringa ( indietro ) e fai confronto tra stringhe
    	// converti array avanti e indietro  
    	
    		if (avanti == indietro) {
    			cout << "PALINDROMA" << endl;
    		}
    
    		else cout << "NON PALINDROMA" << endl;
    	
    
    	system("pause");
    	return 0;
    }

  2. #2
    L'avatar di AntonioG
    AntonioG non è in linea Moderatore Globale Ultimo blog: Commodore 64 e Codemotion
    Luogo
    Roma
    Post
    16,405
    Blogs
    5
    Hai mischiato le stringhe del C e quelle del C++ ... e hai creato due vettori di 100 stringhe ...

    Se usi il C++ allora scrivi di conseguenza, senza fare pasticci con il C ... Inoltre, dato che hai già la variabile parola, la variabile avanti non serve ...

    codice:
    #include "stdafx.h"
    
    #include <iostream>
    #include <string>
    
    using namespace std;
    
    int main()
    {
    	string parola;
    	string indietro;
    
    	cout << " Inserire parola : ";
    	cin >> parola;
    	
    	indietro = parola;
    	for (unsigned int i = 0; i < parola.length(); i++) 
    		indietro[i] = parola[parola.length()-i-1];
    
    	if (parola == indietro) 
    		cout << "PALINDROMA" << endl;
    	else 
    		cout << "NON PALINDROMA" << endl;
    
    	system("pause");
    	return 0;
    }
    Avvisi generali e importanti, a pena CHIUSURA thread e/o BAN
    Il crossposting è vietato.
    Le richieste di "pappa pronta" sono vietate.
    Utilizzate i tag CODE per il codice.
    Leggere il Regolamento per chiarimenti PRIMA di creare nuovi thread.
    Utilizzare sempre i PM per comunicare con i moderatori.
    Non mi contattate in PM per problemi di software, usate il forum

  3. #3
    ellosma non è in linea Novello
    Post
    9
    posso per favore chiederti il motivo di quel indietro=parola e di spiegarmi in quale modo funziona parola[parola.length() - i -1 ]. il fatto che avanti fosse superfluo e' perche' , prima di verificare se la parola e' palindroma, ho provato a procedere per gradi e quindi prima a stampare la parola normale e poi la sua inversa. quale righe di c, invece che di c++ ho scritto ? riguarda la dimensione massima dei cicli? grazie mille per l'aiuto

  4. #4
    L'avatar di AntonioG
    AntonioG non è in linea Moderatore Globale Ultimo blog: Commodore 64 e Codemotion
    Luogo
    Roma
    Post
    16,405
    Blogs
    5
    Intanto la questione principale, l'uso mischiato (e sbagliato) di C e C++. Questa

    char parola[100];

    è una stringa del C fatta da 100 caratteri, mentre queste

    string avanti[100];
    string indietro[100]

    sono stringhe del C++ e sono 100 stringhe non 100 caratteri (errore che riporti in tutto il codice).

    Per questo motivo hai dovuto usare la funzione strlen del C.

    La variabile avanti era comunque inutile perché è una copia della variabile parola. Quindi puoi utilizzare direttamente la variabile parola eliminando l'altra.

    Nella variabile indietro invece, devi ottenere il contenuto della variabile parola al contrario e quindi, all'inizio, deve essere uguale alla parola originaria (ecco perché indietro=parola).

    Infine parola[parola.length() - i -1 ] ottiene un solo carattere della parola originale per volta. Se i è 0, allora otterrà il carattere finale della stringa (fai il calcolo all'interno delle parentesi quadre per capirlo).

    P.S. Ce ne hai messo di tempo per rispondere ...
    Avvisi generali e importanti, a pena CHIUSURA thread e/o BAN
    Il crossposting è vietato.
    Le richieste di "pappa pronta" sono vietate.
    Utilizzate i tag CODE per il codice.
    Leggere il Regolamento per chiarimenti PRIMA di creare nuovi thread.
    Utilizzare sempre i PM per comunicare con i moderatori.
    Non mi contattate in PM per problemi di software, usate il forum

  5. #5
    ellosma non è in linea Novello
    Post
    9
    Grazie mille, ora provo a rifare il calcolo nelle parentesi e spero di capire meglio. Scusa il ritardo ma ho problemi di salute ( sono in carrozzina ) quindi non riesco sempre ad essere veloce come vorrei

  6. #6
    L'avatar di AntonioG
    AntonioG non è in linea Moderatore Globale Ultimo blog: Commodore 64 e Codemotion
    Luogo
    Roma
    Post
    16,405
    Blogs
    5
    Ok, nessun problema ... il fatto è che dopo tempo si dimentica come si è affrontata una questione ...
    Avvisi generali e importanti, a pena CHIUSURA thread e/o BAN
    Il crossposting è vietato.
    Le richieste di "pappa pronta" sono vietate.
    Utilizzate i tag CODE per il codice.
    Leggere il Regolamento per chiarimenti PRIMA di creare nuovi thread.
    Utilizzare sempre i PM per comunicare con i moderatori.
    Non mi contattate in PM per problemi di software, usate il forum

+ Rispondi al Thread

Tag per questa discussione

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi