Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Problema con le stringhe [c++]
Forum - C/C++ - Problema con le stringhe [c++]

Pagine: [ 1 2 3 ] Precedente | Prossimo
Avatar
juventudes (Normal User)
Newbie


Messaggi: 13
Iscritto: 05/07/2015

Segnala al moderatore
Postato alle 18:51
Domenica, 05/07/2015
Salve a tutti, vi seguo da tempo ed oggi ho deciso di registrarmi, soprattutto perché ho bisogno di una mano.
Sto programmando in c++ da autodidatta (avrei dovuto seguire i corsi all'uni, ma non l'ho fatto per vari motivi)
E perciò (esame alle porte) mi sono imbattuto in questo problema.

In pratica avrei un file di testo e vorrei ricopiare il contenuto in una stringa, il problema che ho sta nel fatto che il testo (parole separate) mi viene ricopiato tutto attaccato senza spazi tra le singole parole.
Qui posto il codice, spero possiate aiutarmi, ne avrei bisogno, non solo per l'esame ma anche per me stesso che sono giorni che ci sto sbattendo la testa.

Qui il codice:
Codice sorgente - presumibilmente C++

  1. #include <iostream>
  2. #include <string.h>
  3. #include <fstream>
  4. #define M 300
  5. #define lung 30
  6. using namespace std;
  7.  
  8.  
  9. void leggif(char s[M],int& n,char nome[lung]);
  10. void leggi(char s[M],int n);
  11.  
  12.  
  13.  
  14. int main(){
  15.        
  16.         char stringa[M];
  17.         char nomefile[lung];
  18.         int n;
  19.        
  20.         cout << "Inserire nome del file da leggere: ";
  21.         cin.getline(nomefile,lung-1,'\n');
  22.        
  23.        
  24.         leggif(stringa,n,nomefile);
  25.         leggi(stringa,n);
  26.        
  27.         cout << "\n\n\n";
  28.         system ("pause");
  29.         return 0;
  30. }
  31.  
  32.  
  33. // Leggo il file //
  34. void leggif(char s[M],int& n,char nome[lung]){
  35. fstream file;
  36. n= 0;
  37.                 file.open(nome,ios::in);
  38.        
  39.         if (!file){
  40.                 cout << "\nImpossibile aprire il file...";
  41.                 exit(1);
  42.         }
  43.        
  44.         while (!file.eof())
  45.         file >> s[n++];
  46.  
  47.         for (int i = 0; i < n;i++)
  48.         file>> s[i] ;
  49.        
  50.         file.close();
  51.         file.clear();
  52.  
  53. }
  54.  
  55.  
  56. // Stampo a video il testo //
  57. void leggi (char s[M],int n){
  58.         for (int i =0 ; i < n ;i++)
  59.         cout << s[i];
  60. }




So che il codice è abbastanza semplice, ma sono agli inizi col c++ quindi sono questi gli argomenti che ho studiato, dunque non  voglio spaventarvi :rotfl:

Ultima modifica effettuata da juventudes il 05/07/2015 alle 18:55
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6402
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 20:42
Domenica, 05/07/2015
Quando visualizzi le singole stringhe devi anche andare a capo ... no?

Codice sorgente - presumibilmente Plain Text

  1. cout << s[i] << endl ;


Ultima modifica effettuata da nessuno il 05/07/2015 alle 20:43


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Avatar
juventudes (Normal User)
Newbie


Messaggi: 13
Iscritto: 05/07/2015

Segnala al moderatore
Postato alle 21:26
Domenica, 05/07/2015
Testo quotato

Postato originariamente da nessuno:

Quando visualizzi le singole stringhe devi anche andare a capo ... no?

Codice sorgente - presumibilmente Plain Text

  1. cout << s[i] << endl ;



Si certo, però se uso questa istruzione mi mette le singole lettere una dopo l'altra.
Esempio: il testo è: "Ciao sono juventudes"
Mi esce dopo che l'ho letta: "Ciaosonojuventudes"
Se uso l'endline diventa:
C
i
a
o
... e così via...

Ultima modifica effettuata da juventudes il 05/07/2015 alle 21:29
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6402
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 21:46
Domenica, 05/07/2015
Scusa, ma il testo del file, ad esempio, qual è ?

Non usare array di char (dato che lavori in C++ e non in C) ma un array di string.

string s[M];




Ultima modifica effettuata da nessuno il 05/07/2015 alle 21:54


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Avatar
juventudes (Normal User)
Newbie


Messaggi: 13
Iscritto: 05/07/2015

Segnala al moderatore
Postato alle 22:01
Domenica, 05/07/2015
Non ho mai usato un array di string, per motivi scolastici ci fanno usare l'array di char, qual è la differenza (si sono ignorante lo so,però voglio capire).

Il testo è:
Nel mezzo del cammin di nostra vita
mi ritrovai per una selva oscura
che la dritta via era smarrita

(esempio fatto all'esame, ma può essere qualunque cosa)

ah ps: se uso le string al posto di array di char mi dà lo stesso problema (parole tutte attaccate)

Ultima modifica effettuata da juventudes il 05/07/2015 alle 22:04
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6402
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 22:08
Domenica, 05/07/2015
Ma l'esercizio parla di leggere e visualizzare il contenuto direttamente o memorizzare tutte le parole e poi visualizzare con un'altra funzione?


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Avatar
juventudes (Normal User)
Newbie


Messaggi: 13
Iscritto: 05/07/2015

Segnala al moderatore
Postato alle 22:11
Domenica, 05/07/2015
L'esercizio sarebbe: "leggere un file di testo e stampare a video cosa c'è scritto"
Quindi ho creato una funzione che legge il file di testo, l'altra che mi visualizza su schermo il tutto.
Poi l'esercizio continuerebbe ma io mi sono bloccato qua, proprio nella lettura, leggo il file e mi legge le parole attaccate e vorrei staccarle tra di loro, ma non ho idea di come fare...

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6402
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 22:24
Domenica, 05/07/2015
A giudicare dal testo dell'esercizio ti basterebbe questo

Codice sorgente - presumibilmente C++

  1. int main()
  2. {
  3.         char nomefile[lung];
  4.        
  5.         cout << "Inserire nome del file da leggere: ";
  6.         cin.getline(nomefile,lung-1,'\n');
  7.        
  8.        
  9.         leggif(nomefile);
  10.        
  11.         cout << "\n\n\n";
  12.        
  13.         return 0;
  14. }
  15.  
  16.  
  17. void leggif(char nome[lung])
  18. {
  19.         fstream file;
  20.         char s[M];
  21.  
  22.         file.open(nome,ios::in);
  23.        
  24.     if (!file)
  25.         {
  26.                 cout << "\nImpossibile aprire il file...";
  27.         exit(1);
  28.         }
  29.        
  30.         while (!file.eof())
  31.         {
  32.         file >> s;
  33.                 cout << s << endl;
  34.         }
  35.  
  36.         file.close();
  37. }



Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Avatar
juventudes (Normal User)
Newbie


Messaggi: 13
Iscritto: 05/07/2015

Segnala al moderatore
Postato alle 22:50
Domenica, 05/07/2015
Testo quotato

Postato originariamente da nessuno:
A giudicare dal testo dell'esercizio ti basterebbe questo

Codice sorgente - presumibilmente C++

  1. int main()
  2. {
  3.         char nomefile[lung];
  4.        
  5.         cout << "Inserire nome del file da leggere: ";
  6.         cin.getline(nomefile,lung-1,'\n');
  7.        
  8.        
  9.         leggif(nomefile);
  10.        
  11.         cout << "\n\n\n";
  12.        
  13.         return 0;
  14. }
  15.  
  16.  
  17. void leggif(char nome[lung])
  18. {
  19.         fstream file;
  20.         char s[M];
  21.  
  22.         file.open(nome,ios::in);
  23.        
  24.     if (!file)
  25.         {
  26.                 cout << "\nImpossibile aprire il file...";
  27.         exit(1);
  28.         }
  29.        
  30.         while (!file.eof())
  31.         {
  32.         file >> s;
  33.                 cout << s << endl;
  34.         }
  35.  
  36.         file.close();
  37. }




Come mai basta questo? Non è consigliabile mettere la lettura in un'altra funzione?

PM Quote
Pagine: [ 1 2 3 ] Precedente | Prossimo