[c++]aiuto per diminuire il codice

di il
27 risposte

27 Risposte - Pagina 2

  • Re: [c++]aiuto per diminuire il codice

    Leggi bene sti dati allora. invece del get usa il for.
    
    for(int i = 0; i < 50; i++)
     z >> s[i];
    
  • Re: [c++]aiuto per diminuire il codice

    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
  • Re: [c++]aiuto per diminuire il codice

    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?
  • Re: [c++]aiuto per diminuire il codice

    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")
  • Re: [c++]aiuto per diminuire il codice

    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.
  • Re: [c++]aiuto per diminuire il codice

    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++)
  • Re: [c++]aiuto per diminuire il codice

    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.
  • Re: [c++]aiuto per diminuire il codice

    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++?
  • Re: [c++]aiuto per diminuire il codice

    Cout << .... << endl;
  • Re: [c++]aiuto per diminuire il codice

    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
  • Re: [c++]aiuto per diminuire il codice

    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);
    
  • Re: [c++]aiuto per diminuire il codice

    Endl ti fa il flush non è che serve a niente. Se non vuoi svuotare il buffer puoi fare cout << '\n';
  • Re: [c++]aiuto per diminuire il codice

    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