Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    C++ Problema Con Stringhe

    ciao a tutti ho un problema con le stringhe. Utilizzo il programma Wascana Eclipse e devo compilare un programmino che mi chieda di inserire una stringa di lettere che contengono un determinato simbolo (-). Il programma mi deve restituire le lettere che ho inserito e il numero delle lettere, dopodiché mi deve restituire la stringa inserita ma modificata, cioè ogni volta che trova il simbolo (-) deve inserire 2 spazi vuoti subito dopo e calcolare la lunghezza della nuova stringa. Es:
    Inserisco aaa-d-c
    Il programma mi restituisce
    N = 7
    Input = aaa-d-c

    N = 11
    Output = aaa- d- c

    Quello che ho scritto finora è questo, ma mi da problemi in output perché non conta il numero giusto di lettere e mi dice che c'è un "overflow in implicit constant conversion".. Spero mi possiate dare una mano

  2. #2
    questo è ciò che ho scritto:
    Immagini allegate Immagini allegate

  3. #3
    Utente di HTML.it L'avatar di Dark867
    Registrato dal
    Mar 2010
    Messaggi
    435
    La prossima volta usa il tag code per inserire il tuo codice, non serve ke alleghi immagini.

    Il problema penso sia qui:
    frase2[j]='- '
    frase2[j] è un char ma tu gli vuoi inserire dentro ben 3 char: '-',' ' e ' '.
    Un char vale 1 byte, tu vuoi mettergliene dentro 3!

    Altro consiglio: stai usando il C++, quindi i e j mettili stesso nel for con
    codice:
     for(int i=0;...
    inoltre cos'è quella schifezza
    codice:
     int main(void)
    metti semplicemente
    codice:
    int main()
    o, se vuoi usare il main completo
    codice:
     int main(int argc,char* argv[])
    Sei dell'89 mica del 69..programma in modo "moderno" XD

  4. #4
    ok grazie ora non mi da più il problema di overflow, però in output inserisce delle lettere in più che non so da dove prende, cioè non dovrebbero essere stampate lettere al di fuori di quelle che ho inserito.. ora ho modificato il programma facendo stampare solo uno spazio dopo il segno (-), perciò è solo un char.. però ad esempio questo è ciò che mi esce ora:
    codice:
    Inserisci massimo 100 caratteri senza lasciare spazi (simbolo - per lasciare spazio): 
    abc-def-ghi 
    
    N = 11 
    Input = abc-def-ghi 
    
    N = 15 
    Output = abc- def- ghiþ"
    ci sono i simboli þ" che non so da dove escono..

  5. #5
    Utente di HTML.it L'avatar di Dark867
    Registrato dal
    Mar 2010
    Messaggi
    435
    Una "stringa" è una sequenza di caratteri terminata dal carattere nullo '\0', quindi devi, una volta finito di scrivere la seconda stringa, inserire manualmente in coda '\0'..questo dovrebbe risolverti il problema.
    (quando la fai inserire all'utente tramite cin il carattere terminatore viene aggiunto automaticamente)

  6. #6
    sisi perfetto.. ora non mi inserisce più altri caratteri alla fine, quindi devo solo risolvere il problema del conteggio esatto delle lettere in uscita ed è fatta. Il problema è che non riesco a capire l'errore, perché in base a ciò che inserisco a volte fa il conteggio giusto a volte no.. Comunque ora vedrò se riesco a combinare qualcosa, perché devo vedere prima di tutto come fare per far inserire 2 spazi anziché solo uno (se non ricordo male ci dovrebbe essere un comando "sostituisci" o qualcosa del genere), magari togliendo un indice e ricopiando ogni char della frase1 nella frase2, sostituendo il carattere '-' con '- ' e poi contando di nuovo i caratteri. Perché altrimenti con gli indici i e j che si incrementano si sfalsa il conteggio, dovendo inserire 2 caratteri in più e non solo uno..

  7. #7
    ancora niente... non riesco ad inserire 2 spazi anziché uno.. il programma funziona inserendo un solo spazio e calcola il numero di caratteri finale in modo giusto, ma non so come fare per inserire 2 spazi anziché uno..

    codice:
    * Description: Assegnato un array frase ad N componenti di tipo carattere 
    *        ed un'informazione reale AST di tipo carattere, inserire 
    *        dopo ogni componente il cui valore coincide con quello di 
    *        AST due spazi bianchi 
    */ 
    #include <iostream> 
    #include <iomanip> 
    #include <cstring> 
    
    using namespace std; 
    int main () 
    { 
         char frase1 [100];   // parola inserita 
         char frase2 [300];   // parola modificata 
         int lungh_frase1;    // lunghezza parola inserita 
         int lungh_frase2;    // lunghezza parola in uscita 
         int i;                    // indice che fa scorrere tutte le lettere della parola inserita 
         int j;                    // indice che fa scorrere tutte le lettere della parola modificata 
    
         cout << "Inserisci i caratteri senza lasciare spazi (simbolo - per lasciare spazio):\n"; 
         cin >> frase1; 
    
         lungh_frase1 = strlen (frase1);             // calcola la lunghezza della parola inserita 
         cout << "N = " <<lungh_frase1 << "\n";      // numero di lettere inserite 
         cout << "Input = " <<frase1 << "\n\n";      // dà lettura delle lettere inserite 
    
         for (i=0, j=0; i<lungh_frase1; i++)        // inizializza gli indici per scorrere la frase1 
                                                         // ed assegnare le lettere alla frase2 
         { 
            frase2[j]=frase1[i];                   // assegna le lettere della frase1 alla frase2 
            j=j+1;
             if (frase1[i]=='-') {             // ogni volta che viene inserito - si aggiungono 2 spazi 
                 frase2[j]='- '; j=j+1; 
                                     } 
          } 
          frase2[j] = '\0'; 
         lungh_frase2 = strlen (frase2);      // calcola la lunghezza della parola in uscita 
         cout << "N = " << lungh_frase2 << "\n";      // numero di lettere in uscita 
         cout << "Output = " << frase2 << "\n";      // dà lettura delle lettere in uscita 
          cout << endl; 
         return 0; 
    }

  8. #8
    Utente di HTML.it L'avatar di Dark867
    Registrato dal
    Mar 2010
    Messaggi
    435
    E' facilissimo: uno "spazio" non è nient'altro che un carattere, ' ', ovvero un elemento dell'array.
    Ti basta una cosa del genere:
    codice:
    frase2[j] = ' '; //metto il primo spazio
    j++; //faccio puntare j alla locazione successiva (è una scrittura equivalente di j=j+1 ke usi tu)
    frase2[j] = ' '; //metto il secondo spazio
    j++; //faccio puntare j alla locazione dopo ancora
    //.... qui c'è il ciclo ... //
    
    frase2[j] = '\0'; //all'uscita dal ciclo metto il termine alla stringa di j
    Se vuoi puoi usare anke questa formula + breve:
    codice:
    frase2[j] = ' ';
    frase2[j+1]= ' ';
    j = j+2;

  9. #9
    sisi perfetto!!!! ti ringrazio!!!!!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.