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

[c++] parola palindroma

  1. #1
    ellosma non è in linea Novello
    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
    #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
    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 ...

    #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;
    }
    
    ℹ️ Leggi di più su AntonioG ...

  3. #3
    ellosma non è in linea Novello
    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
    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 ...
    ℹ️ Leggi di più su AntonioG ...

  5. #5
    ellosma non è in linea Novello
    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
    Ok, nessun problema ... il fatto è che dopo tempo si dimentica come si è affrontata una questione ...
    ℹ️ Leggi di più su AntonioG ...

+ Rispondi al messaggio

Potrebbero interessarti anche ...

  1. cercare una parola nel web!!!
    Da io?!?! nel forum Visual Basic 6
    Risposte: 5
    Ultimo Post: 24-10-2010, 15:26
  2. Sostituzione parola
    Da Sergran nel forum Microsoft Word
    Risposte: 29
    Ultimo Post: 17-09-2010, 09:39
  3. leggere parola per parola
    Da Marco2012 nel forum Visual Basic .Net
    Risposte: 10
    Ultimo Post: 09-01-2010, 17:58
  4. Criptaggio parola...
    Da Morpheus80 nel forum Visual Basic 6
    Risposte: 2
    Ultimo Post: 16-02-2005, 11:53
  5. Dividere una parola
    Da mark81 nel forum Visual Basic 6
    Risposte: 10
    Ultimo Post: 09-01-2005, 10:22