PDA

Visualizza la versione completa : [strano] Problema con stringa in C++


rijel
07-01-2003, 22:03
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!!)



#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;
}

r0x
08-01-2003, 00:07
Devi aggiungere il terminatore di stringa '\0' prima di stamparla a video.



...
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:



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.

rijel
08-01-2003, 02:03
...vengo da altri linguaggi e non sono ancora abituato a questi piccoli ma importantissimi dettagli...! :dhò:

Grazie ancora! :D

RmiMik
08-01-2003, 12:42
:nonono:
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++...........
:nonono:

rijel
08-01-2003, 12:50
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" :D

l.golinelli
08-01-2003, 14:06
Giusto in parte... :dottò:

r0x
08-01-2003, 20:09
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.

l.golinelli
08-01-2003, 20:18
Verissimo! :ciauz:

rijel
09-01-2003, 01:06
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 :p ), 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! :)

l.golinelli
09-01-2003, 10:47
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...

:ciauz:

Loading