|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Mar 2011
Messaggi: 1050
|
[C++] uppercase - conversione da lettere minuscole a maiuscole
Uno dei mie tanti dubbi:
Ho un array con una serie di lettere minuscole.. vorrei creare una funzione che converta tutte le lettere minuscole in maiuscolo.. Avevo pensato a uno switch in cui mettere tutte le lettere dell'alfabeto e nel caso in cui la funzione trova quella lettera sarà presente in uno dei case dello switch e all'interno di questo case sarà presente uno scambio cosi ad esempio: Codice:
for(int i=0; array[i]!='\0'; i++){
switch(array[i]){
case 'a': array[i]='A';
break;
case 'b': array[i]='B';
break;
...
...
//e cosi' via....
}//switch
}//for
|
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
Codice:
std::transform(text.begin(), text.end(), text.begin(), std::toupper); |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Mar 2007
Città: Milano Beach
Messaggi: 1696
|
Altrimenti giochi con la rappresentazione numerica del char sottraendogli una costante (controlla l'ascii table).
__________________
~ Cthulhu: MacBookPro 13.3" ~ Azathoth: D510MO |
|
|
|
|
|
#4 | |
|
Senior Member
Iscritto dal: Dec 2007
Città: Palestro
Messaggi: 1960
|
Quote:
__________________
My PC: Case: BeQuiet! Pure Base 500 + BeQuiet! Pure Wings 2 140mm & Noctua NF-A14 PWM front intake + BeQuiet! Pure Wings 2 140mm rear exhaust - CPU: AMD Ryzen7 5800X3D (DVID: -0.1V) - CPU Cooler: Noctua NH-D15 - MB: MSI X570 Gaming Edge WiFi - PSU: Corsair RM850 full modular - GPU: Gigabyte 2070 Super Gaming OC 3X (fallata....! |
|
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: May 2001
Messaggi: 12919
|
Ancora meglio se giocate con i bit
Praticamente tra lettere minuscole e maiuscole cambia solo il 6° bit (contando da destra) |
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Mar 2011
Messaggi: 1050
|
ma a me serve un modo un pò piu' efficiente ma sempre molto elementare!! dato che mi sto preparando per un esame di fondamenti! Quindi niente funzioni pronte e niente librerie!
|
|
|
|
|
|
#7 |
|
Member
Iscritto dal: Jan 2008
Città: Roma
Messaggi: 126
|
L'algoritmo e' corretto. Cambia l'implementazione!
Nel senso che in un caso (il tuo) effettui il tutto a mano mentre in quello di tomminno fai fare il lavoro alla libreria (che fara' in modo sicuramente piu' ottimizzato il ragionamento che hai fatto tu). Anche la sostituzione 'aritmetica' del carattere ascii e' una strada, ma la puoi applicare anche utilizzando le funzioni di conversione del C. ---(p.e.)-------- int i=0; while(array[i]) { if (isalpha(array[i])) array[i]=toupper(array[i]); i++; } -------- Ciao
__________________
La forza dei forti sta nel traversare le traversie con occhio sereno! (PK) ... I computer sono esattamente come gli esseri umani: fanno qualsiasi cosa tranne che pensare. (John Van Neumann) Siamo brevi, il mondo è sovraffollato di parole. (Stanisław Jerzy Lec) |
|
|
|
|
|
#8 | |
|
Senior Member
Iscritto dal: Mar 2007
Città: Milano Beach
Messaggi: 1696
|
Quote:
__________________
~ Cthulhu: MacBookPro 13.3" ~ Azathoth: D510MO |
|
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: Mar 2011
Messaggi: 1050
|
cioè?! come si gioca con i bit??!
|
|
|
|
|
|
#10 |
|
Senior Member
Iscritto dal: May 2001
Messaggi: 12919
|
Usando gli operatori bitwise, & (and), | (or), ^ (xor) e ~ (not).
Codice:
char bits 'a' 110 0001 'A' 100 0001 Sapendo che sono tutte potenze di 2 basta calcolare 2^5 (perché si parte da 0) che fa 32 come detto correttamente da GByte. Dunque: Codice:
int bits 32 010 0000 ~32 101 1111 Codice:
char bits 'a' 110 0001 AND ~32 101 1111 = ----------------- 'A' 100 0001 Codice:
char little = 'a'; char big = little & ~32; // disattivi il 6° bit Codice:
char big = 'A'; char little = big | 32; // attivi il 6° bit Codice:
'a' ^ 32 => 'A' 'A' ^ 32 => 'a' Ultima modifica di WarDuck : 31-03-2011 alle 17:31. |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 23:47.




















