[C++] problema copia stringa su file

di il
34 risposte

[C++] problema copia stringa su file


case 1:
cout<<"Hai scelto 1 --> criptare\n";
cout << "\ncome vuoi chiamare il file? aggiungi il .txt alla fine: " ;
cin >> NomeFile;
pf = fopen ( NomeFile , "w" ) ; 
if (pf) 
{ 
cout << "Inserisci testo : " ; 
fflush(stdin);
gets (messaggio); 
fprintf (pf, "%s\t", messaggio);
} 
else 
cout << " Errore durante l’ apertura del file." ;
fclose (pf) ;
cout<<"Stringa criptata: "<<crypt_de_crypt(messaggio, true)<<endl; 
fprintf (pf, "%s\t", messaggio);
break;
Praticamente mi cripta quella che ho scritto nel file, scrivendolo nel prompt criptato.
ma se dopo faccio la fprintf del "messaggio"--> fprintf (pf, "%s\t", messaggio); ma ovviamente rimane quello di prima (non criptato)
La domanda (sicuramente banale) è: come faccio a scrivere nella stringa messaggio o in un altra stringa la frase criptata?

34 Risposte

  • Re: [C++] problema copia stringa su file

    Mi sembra ovvio. La variabile messaggio contiene la stringa non criptata e nessuno la modifica.

    Devi memorizzare la stringa restituita dalla funzione e passarla alla fprintf.

    Cosa restituisce la funzione? Come è fatta?
  • Re: [C++] problema copia stringa su file

    Se ho capito ciò che intendi (e cioè che anche la stringa messagio deve criptarsi) basta che applichi la funzione crypt_de_crypt sulla stessa variabile (andandola quindi a modificare).

    p.s.: usa il tag code, poiché è una sofferenza leggere un codice senza di esso...
  • Re: [C++] problema copia stringa su file

    oregon ha scritto:


    Mi sembra ovvio. La variabile messaggio contiene la stringa non criptata e nessuno la modifica.

    Devi memorizzare la stringa restituita dalla funzione e passarla alla fprintf.

    Cosa restituisce la funzione? Come è fatta?
    ecco la funzione:
    
    string crypt_de_crypt(string input, bool op) 
    {
        string n="";
    
        for(unsigned int i=0;i<input.length();i++)
            if(input[i] >= 65 && input[i] <= 90)
                n+= (oper(input[i], op) > 90) ? (64 + oper(input[i], op) %90) : oper(input[i], op);
            else if(input[i] >= 97 && input[i] <= 122)
                    n+= (oper(input[i], op) > 122) ? (96 + oper(input[i], op) %122) : oper(input[i], op);
            else
                n+= input[i];
    
        return n;
    }
    
  • Re: [C++] problema copia stringa su file

  • Re: [C++] problema copia stringa su file

    Leggi il regolamento.

    Per tutte le domande in cui posti il codice, devi racchiuderlo tra tag CODE.

    Comunque, devi assegnare il risultato ad una stringa e usare quella
    
    string msgcry;
    
    msgcry =  crypt_de_crypt(messaggio, true);
    cout << "Stringa criptata: " << msgcry << endl; 
    fprintf (pf, "%s\t", msgcry);
    
    E in ogni caso, che c'entrano i "vettori C" del titolo in questa tua domanda?
  • Re: [C++] problema copia stringa su file

    Pietrob0b ha scritto:


    ecco la funzione:
    string crypt_de_crypt(string input, bool op)
    {
    string n="";

    for(unsigned int i=0;i<input.length();i++)
    if(input >= 65 && input <= 90)
    n+= (oper(input, op) > 90) ? (64 + oper(input, op) %90) : oper(input, op);
    else if(input >= 97 && input <= 122)
    n+= (oper(input, op) > 122) ? (96 + oper(input, op) %122) : oper(input, op);
    else
    n+= input[i];

    return n;
    }


    l'unsigned nel ciclo for è superfluo e ti consiglio di non utilizzare troppe istruzioni su una sola riga per migliorare la leggibilità del codice.

    n+= (oper(input[i], op) > 122) ? (96 + oper(input[i], op) %122) : oper(input[i], op);
    è molto più chiaro così:
    if ( oper(input[i], op) > 122 )
        n += 96 + oper(input[i], op) % 122;
    else
        n += oper(input[i], op);
    risultando molto più leggibile. certo, il file diventa più lungo, ma le andate a capo le paghi a qualcuno?
  • Re: [C++] problema copia stringa su file

    oregon ha scritto:


    Leggi il regolamento.

    Per tutte le domande in cui posti il codice, devi racchiuderlo tra tag CODE.

    Comunque, devi assegnare il risultato ad una stringa e usare quella
    
    string msgcry;
    
    msgcry =  crypt_de_crypt(messaggio, true);
    cout << "Stringa criptata: " << msgcry << endl; 
    fprintf (pf, "%s\t", msgcry);
    
    E in ogni caso, che c'entrano i "vettori C" del titolo in questa tua domanda?
    Mi da questo errore sulla prima riga:
    [Error] incompatible types in assignment of 'std::string {aka std::basic_string<char>}' to 'char [500]'
  • Re: [C++] problema copia stringa su file

    Ma tu utilizzi la classe string del C++ ? O no ?

    Cosa è quel vettore di char[500]? Dove sta nel tuo codice? Non mi pare che ci sia.

    Vuoi mostrare TUTTO il codice che compili, compresi define e include?
  • Re: [C++] problema copia stringa su file

    oregon ha scritto:


    Ma tu utilizzi la classe string del C++ ? O no ?

    Cosa è quel vettore di char[500]? Dove sta nel tuo codice? Non mi pare che ci sia.

    Vuoi mostrare TUTTO il codice che compili, compresi define e include?
    
    #include <iostream>
    #include <fstream>
    #include <stdio.h>
    #include <ostream>
    
    #include <string>
    
    using namespace std;
    
    char oper(char a, bool op);
    string ccript(string input, bool op);
    
    
    int main() 
    {
        int i=0;
        string s;
        char NomeFile[15];
    	int  n;
    	char messaggio[500]; //messaggio che si inserisce
    	char messaggiou[500]; //messaggio da leggere
    //	char msgcry [500]; //messaggio criptato
    	string msgcry[500];
    
    	
    	FILE *pf ;
    
    
        cout<<"-Attenzione: in questo programma non possono essere usate lettere accentate o simili e/o maiuscole\n"
        	<<"-Per avere una maggiore sicurezza del programma sconsiglio l'uso di lettere doppie\n\n"
        	
    		<<"1) Cripta\n"
            <<"2) Decripta\n"
    		<<"Esci con qualsiasi altro numero\n";
        cin>>i;
        
        fflush(stdin);
        switch(i) {
            case 1:
            	cout<<"Hai scelto 1 --> criptare\n";
                cout << "\ncome vuoi chiamare il file? aggiungi il .txt alla fine: " ;
    			cin >> NomeFile;
    			pf = fopen ( NomeFile , "w" ) ; 
    			if (pf) 
    				{ 
    					cout << "Inserisci testo : " ; 
    					fflush(stdin);
    					gets (messaggio); 
    					fprintf (pf, "%s\t", messaggio);                                     //fino a qui stampa nel file il messaggio che inseriamo
    				} 
    			else 
    				cout << " Errore durante l’ apertura del file."  ;
    				fclose (pf) ;
    				
    				
               // cout<<"Stringa criptata: "<<ccript(messaggio, true)<<endl;     	//stampo nel prompt la stringa criptata ma non la salva nel vettore
                msgcry =  ccript(messaggio, true);
    			cout << "Stringa criptata: " << msgcry << endl; 
    			fprintf (pf, "%s\t", msgcry);
                
            
    		break;
    
  • Re: [C++] problema copia stringa su file

    Non devi usare 500 oggetti string!

    Devi usare

    string messaggio;
    string msgcry;

    Questi sono oggetti della libreria C++ non array di char del C. Conosci la differenza?
  • Re: [C++] problema copia stringa su file

    oregon ha scritto:


    Non devi usare 500 oggetti string!

    Devi usare

    string messaggio;
    string msgcry;

    Questi sono oggetti della libreria C++ non array di char del C. Conosci la differenza?
    ho capito ma se cambio in questo modo, devo utilizzare gli stream?
  • Re: [C++] problema copia stringa su file

    No, non è necessario. Ma devi deciderti se devi usare C o C++.

    Dato che hai scritto

    #include <string>

    vuol dire che usi il C++ e le stringhe del C++.
  • Re: [C++] problema copia stringa su file

    oregon ha scritto:


    No, non è necessario. Ma devi deciderti se devi usare C o C++.

    Dato che hai scritto

    #include <string>

    vuol dire che usi il C++ e le stringhe del C++.
    visto che non ho capito bene come si usano le stringhe del c++, meglio il C...quindi devo usare #include <cstring> giusto?
    e come posso risolvere il problema che ho scritto prima che veniva fuori dalle istruzioni che mi hai dato?
  • Re: [C++] problema copia stringa su file

    Le stringe del c++ sono più semplici, da un certo punto di vista, rispetto agli array di caratteri del c, perchè per copiare una stringa in un'altra puoi tranquillamente fare
    string a;
    string b = "asd";
    a = b; // a conterrà "asd"
    
    invece che dover utilizzare il solito for per copiare tutti i caratteri.
Devi accedere o registrarti per scrivere nel forum
34 risposte