PDA

View Full Version : [C++]tolower


monkeys86
25-03-2008, 13:05
ciao so che è un problema da poco ma nn riesco lo stesso a risolverlo; abituato a usare il java che disponeva di mille funzioni, nn riesco a risolvere i problemi facili in c++; praticamente ho una stringa(dichiarata come stringa nn come array di char) e devo trasformarla in una serie di caratteri minuscoli
es: se ho Risotto deve diventare risotto....il tolower funziona solo se gli passo un char, esiste una funzione in grado di trasformare un'intera stringa?

wizard1993
25-03-2008, 13:18
string prova="QWERTY";
for(int i=0;i<prova.length();i++){
prova[i]=tolower(prova[i]);
}

monkeys86
25-03-2008, 13:23
funziona?? nn devo includere nessuna libreria di supporto?

tomminno
25-03-2008, 13:26
Così trasformi la stringa sovrascrivendola in C++

#include <algorithm>

string maiuscolo = "TUTTO MAIUSCOLO";
std::transform(maiuscolo.begin(), maiuscolo.end(), maiuscolo.begin(), tolower);

wizard1993
25-03-2008, 13:31
e pensi che il mio non faccia la stessa cosa?, inoltre non sfrutta nulla apparte la <iostream>

tomminno
25-03-2008, 13:37
e pensi che il mio non faccia la stessa cosa?, inoltre non sfrutta nulla apparte la <iostream>

Ho solo proposto un'alternativa. :mbe:
E comunque la tua soluzione non sfrutta <iostream>.
E poi perchè mai non sfruttare le potenzialità del linguaggio, quando ci sono?

wizard1993
25-03-2008, 13:39
Ho solo proposto un'alternativa. :mbe:
E comunque la tua soluzione non sfrutta <iostream>.

sarà io includo solo quella e il compilatore borland lo prende.
scusa se sono sembrato offensivo, non era assolutamente mi intenzione

monkeys86
25-03-2008, 14:18
okok grazie mille per le indicazioni andavano bene tutti e due, ma preferisco non usare la stl, comunque grazie lo stesso...ora però ho un altro problema; per leggere un file di testo io faccio cosi

ifstream i;
string parola;
i.open("Testo.txt");
while(i)
{
i>>parola;
cout<<parola;
}

perchè l'ultima parola del testo me la legge due volte???

wizard1993
25-03-2008, 14:22
scusa un secondo, io di solito faccio così
while(i>>parola){
// to do
}

tomminno
25-03-2008, 14:45
okok grazie mille per le indicazioni andavano bene tutti e due, ma preferisco non usare la stl,


Primo l'STL la stai usando comunque visto che string ne fa parte.
E poi perchè mai non usare una funzionalità che semplifica la vita?

Inoltre se al C++ togli l'STL ti rimane solamente la libreria C con l'aggiunta delle classi.


comunque grazie lo stesso...ora però ho un altro problema; per leggere un file di testo io faccio cosi

ifstream i;
string parola;
i.open("Testo.txt");
while(i)
{
i>>parola;
cout<<parola;
}

perchè l'ultima parola del testo me la legge due volte???

Ma non volevi evitare l'STL? ;)
Devi testare anche eof.

tomminno
25-03-2008, 14:47
sarà io includo solo quella e il compilatore borland lo prende.
scusa se sono sembrato offensivo, non era assolutamente mi intenzione

Il compilatore borland mi sa che fa un pò a modo suo, visto che string è definita in <string> e non ha niente a che vedere con <iostream> che serve appunto per l'inclusione degli stream per l'io.

wizard1993
25-03-2008, 14:56
Il compilatore borland mi sa che fa un pò a modo suo, visto che string è definita in <string> e non ha niente a che vedere con <iostream> che serve appunto per l'inclusione degli stream per l'io.

effettivamente me l'hanno sempre detto che il borland fa un po i cavoli suoi, bho

monkeys86
25-03-2008, 16:51
no mi son spiegato male sono io che non volevo usare l'stl ma non sapevo neanke che la classe string ne facesse parte....cmq grazie dei consigli ho risolto