Dubbio funzione tolower/toupper

di il
2 risposte

Dubbio funzione tolower/toupper

Avrei giusto un piccolo dubbio riguardo questa funzione, stavo smanettando un pò, in particolare volevo convertire la A in questo codice in a, esso funziona, ma nell'output appare anche 97 (ossia il corrispettivo ASCII del carattere 'a').
Questo accade nonstante faccia il cast con
putchar()
qualcuno sa spiegarmi perché?

#include <iostream>
#include <string>
#include <ctype>
using namespace std;

int main()
{

    string s="Aaaa";
    cout << putchar(tolower(s[0])) << endl;
    return 0;
}
Grazie in anticipo

2 Risposte

  • Re: Dubbio funzione tolower/toupper

    NON E' un problema di tolower/toupper, MA il tipo di risultato!

    UNA COSA e' un "char" (che E' ANCHE un intero a 8 bit con o senza segno, DIPENDE dalla configurazione del compilatore) ed UN'ALTRA COSA e' un int.

    IN GENERALE, "cout" TRATTA il char come un carattere, NON come un intero!
    
    std::cout << 'a' << ' ' << (int)'a' << ' ' << putchar(97) << ' ' << 97 << ' ' << char(97) << std::endl;
    
    ALTRO problema: in C/C++ ci sono DUE modi per scrivere sulla console:

    1) le funzioni alla C ("putchar")
    2) gli stream alla C++ ("std::cout" e l'operatore "<<")

    E' UNA PESSIMISSIMISSIMA IDEA mescolare i due mondi.
  • Re: Dubbio funzione tolower/toupper

    Hai fatto un po' di confusione ...

    La putchar non esegue alcun cast ma visualizza il carattere a video e restituisce l'intero corrispondente.

    Quindi (nel codice C) si usa al posto della cout (del C++)
    
    	string s = "Aaaa";
    	putchar(tolower(s[0]));
    
    Se usi la cout allora il cast lo indichi per la tolower
    
    	string s = "Aaaa";
    	cout << (char)tolower(s[0]) << endl;
    
    Mischiare codice C e C++ deve essere fatto con molta accortezza, altrimenti rinuncia e usa un solo linguaggio.
Devi accedere o registrarti per scrivere nel forum
2 risposte