strtoupper e strtolower in c 6


Oggi vediamo come creare strtoupper e strtolower, cioè le due funzioni che convertono rispettivamente tutto in maiusco e in minuscolo.

Vediamo i codici:

void strtoupper(char *str){
      int len = strlen(str), i;
      
      for(i=0;i<len;i++)
            if(str[i]>='a' && str[i]<='z')
                 str[i] = str[i]-'a'+'A';
}

void strtoupper(char *str){
      int len = strlen(str), i;
      
      for(i=0;i<len;i++)
            if(str[i]>='A' && str[i]<='Z')
                 str[i] = str[i]-'A'+'a';
}

In pratica controllo carattere per carattere se sono maiuscoli o minuscoli e li converto di conseguenza, con ad esempio str[i]-‘a’+’A’.

Per i più esperti propongo una versione con i puntatori, che non spiego perché è ovvia per chi sa usare i puntatori (ringrazio Marco per l’idea e il codice):

void strtoupper(char *str){

      for(; *str; str++)
            if(*str>='a' && *str<='z')
                 *str = *str-'a'+'A';
}

void strtoupper(char *str){

      for(;*str;str++)
            if(*str>='A' && *str<='Z')
                 *str = *str-'A'+'a';
}

CC BY-SA 4.0 strtoupper e strtolower in c by cardinale claudio is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License.


Lascia un commento

6 commenti su “strtoupper e strtolower in c

  • Marco

    Mi sembra altamente inefficiente.
    Non c’è alcun bisogno di fare una strlen, per ogni string passata, basta semplicemente controllare che non sia il carattere di fine stringa.
    Non c’è neanche bisogno di una variabile i, perchè str è un puntatore,
    io lo modificherei così:

    void strtoupper(char *str){
     
          for(; *str; str++)
                if(*str>='a' && *str<='z')
                     *str = *str-'a'+'A';
    }
     
    void strtoupper(char *str){
    
          for(;*str;str++)
                if(*str>='A' && *str<='Z')
                     *str = *str-'A'+'a';
    }
    
  • cardi L'autore dell'articolo

    Sono perfettamente d’accordo, ma una persona che sa usare i puntatori non ha bisogno di andare a vedere un articolo del genere…

  • Marco

    Beh io non so che gente ci può essere qui.
    Ho visto questo articolo non sembrava indirizzato a nessun tipo di target, e quindi ho pensto bene di completare il tutto.
    E poi è uno dei primi articoli che mi sono usciti su google durante la ricerca, e io i puntatori li so’ usare.

    Ciao,
    Marco.