[c++]aiuto per diminuire il codice

di Anonimizzato8991 il
27 risposte

27 Risposte - Pagina 2

  • Leggi bene sti dati allora. invece del get usa il for.
    
    for(int i = 0; i < 50; i++)
     z >> s[i];
    
  • Ho scritto
    #include<iostream>
    #include <windows.h>
    #include <fstream> 
        
        using namespace std;
         
        main()
        {
        char s[1000];
    fstream z("cripto.txt" );
    for(int i = 0; i < 1000; i++)
    z >> s[i];
    for(int i = 1; i < 1000; i+= 2)
          cout << static_cast<char>(s[i-1] - s[i]);
          system("pause");
    }

    ma non va forse mi conviene lasciar stare questi metodi e usare il codice iniziale xD
  • Com'è il formato del tuo file? Sai usare il debugger per vedere cosa contiene "s" dopo la lettura da file? Capisci che stiamo andando alla cieca?
  • Il formato del file è .txt e dentro c'è scritto:
    137 38 124 19 335 238 448 337
    il debugger non so usarlo ci ho provato e mi dice che c'è un bug ma non so dove il programma che stiamo (stai xD) creando deve sottrarre alla prima serie di numeri ovvero "137" la seconda serie ovvero "38" alla terza serie ovvero "124" deve sottrarre la 4 serie ovvero "19" e così via poi nel cout deve far vedere delle lettere al posto dei numeri (in questo caso deve uscire "ciao")
  • Prova sto codice:
    
    #include <iostream>
    #include <fstream>
    #include <vector>
    #include <algorithm>
    #include <iterator>
    
    int	main()
    {
    	std::ifstream is("cripto.txt", std::fstream::in);
    	if(is)
    	{
    		std::vector<int> vec;
    		std::copy(std::istream_iterator<int>(is),
    					std::istream_iterator<int>(),
    					std::back_inserter(vec));
    		std::string str;
    		size_t length = vec.size();
    		for(size_t i = 1; i < length; i++)
    		{
    			if(i%2)
    			{
    				str += static_cast<char>(vec[i-1] - vec[i]);
    			}
    		}
    		std::copy(str.begin(),
    					str.end(),
    					std::ostream_iterator<char>(std::cout,""));
    		is.close();
    	}
    }
    
    e dimmi se ti funziona. Poi te lo spiego dopo.
  • Siiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii funziona! anche se per me è ancora cinese ma funziona allora quando avrai un po' di tempo illuminami xD (per curiosità che lavoro fai? dato che sembra che conosci bene il c++)
  • Allora l'idea è questa: Devi ricavare i dati in formato intero non in formato carattere, quindi ho usato la classe vector (per semplificarti le cose puoi usare un int vec[100]). tutta quella riga che inizia con std::copy non fa altro che piazzare tutti gli interi nelle rispettive celle del vettore quindi il 137 nella cella 0, il 38 nella cella 1 e così via. Il ciclo for parte dall'indice 1 quindi dal vec[1] che è il 38 e confronta l'indice. se questo indice non è divisible per 2 (quindi indice dispari) piazza nella stringa (che in soldoni lo puoi considerare come un array di caratteri) la differenza tra l'elemento in posizione dispari e quello in posizione pari. Alla fine l'ultimo std::copy fa la stampa su cout, ma puoi utlizzare anche
     cout << str.c_str()
    che fa la stessa cosa invece di usare tutta quella riga. Faccio il programmatore da 15 anni (per hobby e non) anche se attualmente sto facendo tutt'altro.
  • Ah ok più o meno ho capito anche se non riuscirei a replicare il codice xD è ancora troppo difficile per me comunque ho un altro problemino (non mandarmi a quel paese xDD) nel primo programma ho usato std::getline(std::cin, parola); per l'acquisizione invece del cin>> ma... come devo fare per usare il cin>> prima? cioè il programma è
    cout<<...
    cin>>...
    cout<<...
    std::getline(std::cin, parola);
    ma compilando il programma non funziona cioè non fa niente non esegue i cout ne cin niente da quello che ho capito se prima del getline uso cin vanno in conflitto allora ho provato a mette cin.ignore() subito dopo il cin>> ma nemmeno va

    RISOLTO: bastava svuotare il buffer con fflush(stdin); ma... è in c conosci un comando che svuoti il buffer in c++?
  • Cout << .... << endl;
  • Si vabè lo so xD l'endl ce lo metto sempre xD vabè mi accontento della funzione in c ma... ho un altro piccolo problema in
    std::ifstream is("cripto.txt", std::fstream::in); 
    vorrei che il nome del file lo inserisca l'utente ho provato con
    char x;
      cin>>x;
       std::ifstream is(x, std::fstream::in);
    ma niente
  • Char è un carattere a te serve una stringa. Visto che stai imparando il C++ lascia stare il char oppure char[] ma impara as usare std::string.
    
    std::string str;
    cin >> str;
    std::ifstream is(str.c_str(), std::fstream::in);
    
  • Endl ti fa il flush non è che serve a niente. Se non vuoi svuotare il buffer puoi fare cout << '\n';
  • Ah ok capito per ora non ho più problemi (finalmente ) grazie cerco di imparare ad usare le stringhe allora
Devi accedere o registrarti per scrivere nel forum
27 risposte