Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2001
    Messaggi
    11

    [strano] Problema con stringa in C++

    Salve a tutti!

    Sto scrivendo un semplice programmino che legga una stringa in ingresso, separi le parole e le riscriva una per riga.

    Sapete spiegarmi perchè questo codice riceve la stringa in modo corretto ma poi quando la riscrive parola per parola aggiunge caratteri strani?
    (es.: inserendo "ciao prova stringa" riporta:

    ciaoX "
    prova "
    stringa

    ...virgolette comprese!!)

    codice:
    #include <iostream.h>
    #define LUNGHEZZA_STRINGA 50
    
    typedef char string[LUNGHEZZA_STRINGA];
    string stringa; // variabile che conterrà l'input iniziale
    
    // Prototipi delle funzioni utilizzate
    void leggi_stringa(string&);
    
    // Programma principale
    main()
    {
     string temp;
     int i=0,j=0,k=0;
     
     // leggo la stringa da ordinare
     leggi_stringa(stringa);
     cout << endl << "la stringa e': " << stringa << endl << endl;
     
     // Scorro la stringa e separo le parole, mandandole in cout;
     while(1)
     {
       if (stringa[i]==' ')
       {
           cout << temp << endl;
           i++;                             
           for (k=0;k<j; k++)
           {
    	     temp[k]= ' ';
    	   }
    	   
    	   j=0;
       }
       else if (stringa[i]=='\0')
       {
          cout << temp;
          break;
       }
       else
       {
         temp[j]=stringa[i];
         i++;
         j++;
       }
     }
    // FINE DEL MAIN //
    }
    
    // Dichiarazione delle funzioni utilizzate
    void leggi_stringa(string &result)
    {
     string temp_string;
     char temp;
     int i=0;
     
     cout << "Inserire una stringa di lunghezza NON superiore" << endl
          << "ai 50 caratteri ('0' per terminare la lettura):"
          << endl << endl;
     i=0;
     cin.unsetf(ios::skipws);
     cin >> temp;
     while ((temp!='0') && (i<LUNGHEZZA_STRINGA))
     {
       temp_string[i]=temp;
       i++;
       cin >> temp;
     }
     result=temp_string;
    }

  2. #2
    Devi aggiungere il terminatore di stringa '\0' prima di stamparla a video.

    codice:
    ...
    if (stringa[i]==' ')
       {
           temp[ j ] = '\0'; 
           cout << temp << endl;
    ...
    else if (stringa[i]=='\0')
       {
          temp[ j ] = '\0'; 
          cout << temp;
    ...
    Cmq non serve reimpostare gli spazi in temp con quel ciclo (k).

    Ti ho riscritto una mia versione:

    codice:
    i = 0;
    
    while( *stringa )
    {
        if( *stringa == ' ' )
        {
            if( i )
            {
                temp[ i ] = '\0';
                cout << temp << endl;
            }
    
            i = 0;
        }
        else
            temp[ i++ ] = *stringa;
    
        stringa++;
    }
    
    if( i )
    {
        temp[ i ] = '\0';
        cout << temp << endl;
    }
    Ciao.

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2001
    Messaggi
    11

    grazie mille!!

    ...vengo da altri linguaggi e non sono ancora abituato a questi piccoli ma importantissimi dettagli...!

    Grazie ancora!

  4. #4
    Utente di HTML.it
    Registrato dal
    Jan 2003
    Messaggi
    25

    Perche usate le stringhe in stile C
    Se C++ offre la classe string??
    Vi complicate le cose inutilmente....
    A questo punto programmate in C non
    in C++...........

  5. #5
    Utente di HTML.it
    Registrato dal
    Jun 2001
    Messaggi
    11
    era un esercizio che non prevedeva l'uso della classe string... per la serie "prima di usare le agevolazioni cerchiamo di capire cosa c'è sotto"

  6. #6
    Utente di HTML.it
    Registrato dal
    Oct 2002
    Messaggi
    2,894
    Giusto in parte...

  7. #7
    Eh, questa cosa l`ho gia` detta anch`io. D`altronde il C++ presuppone un sostrato. Se si continua a studiare questo sostrato (array e stringhe per es.), il C++ vero e proprio non si studia mai. Questo naturalmente non significa che il funzionamento di queste cose debba essere dato per scontato, ma assimilato gia` da tempo. Iniziare con il C++ non e` una scelta felice, a meno che non si sia obbligati per forza maggiore.

    Spero di essere stato chiaro.

    Ciao.

  8. #8
    Utente di HTML.it
    Registrato dal
    Oct 2002
    Messaggi
    2,894
    Verissimo!

  9. #9
    Utente di HTML.it
    Registrato dal
    Jun 2001
    Messaggi
    11

    piccoli chiarimenti! :)

    Ehm ragazzi, l'esercizio sopracitato dovevo svolgerlo così, non era una mia scelta: sto frequentando un corso che tratta praticamente solo C++... :tongue:

    Vengo tra l'altro da un precedente corso dove ho studiato anche il C (forse maluccio, viste le difficoltà con le stringhe ), quindi anche se le basi ci son già dovevo svolgerlo comunque in questa maniera... :quipy:

    Tra l'altro sono d'accordissimo sullo sfruttare la libreria string piuttosto che sbattersi così, sinceramente mi sentirei un po' fesso se non lo facessi! :gren:

    Saluti!

  10. #10
    Utente di HTML.it
    Registrato dal
    Oct 2002
    Messaggi
    2,894
    Appunto... Non ha senso imparare metodi che poi non userai mai... Già che le cose da imparare sono quasi infinite, se poi ci si mette anche a complicarsi la vita...

    E' il corso che è sbagliato...


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 © 2024 vBulletin Solutions, Inc. All rights reserved.