Supponiamo che si ottiene la funzione toUpper()
già, che è definito come int toUpper(char)
, Come è possibile implementare la funzione toLower()
, che è int toLower(char)
. Grazie.Come implementare tolower() se si ottiene ToUpper() già
risposta
Suppongo che questo è un modo che utilizza l'implementazione esistente di toUpper
(si noti che toLower
e toUpper
sono definiti come mangiare int
e ho fatto in modo di conseguenza; io parto dal presupposto che si dispone di un errore di battitura nel vostro OP):
int toLower(int c) {
for(int i = 0; i <= UCHAR_MAX; i++) {
if(c != i && toUpper(i) == c) {
return i;
}
}
return c;
}
Modifica: Grazie, Chris Lutz.
@Chris Lutz: No, non la penso così. Si prega di vedere la condizione 'se'. – jason
Il mio male. L'hai cambiato? Lo ricordo diversamente, ma potrei semplicemente non funzionare (è successo oggi). –
@Chris Lutz: conosco il sentimento; nessun problema. Originariamente avevo 'upper == c && c! = I' ma lo ho cambiato in' c! = I && upper == c'. – jason
Creare due array paralleli (A e B), ciascuno abbastanza grande da contenere l'intero set di caratteri. Passare attraverso tutti i valori in A e sostituire ogni valore con toUpper(value)
. Quindi attraversare B, e ovunque A differisce, sostituire B [A [valore]] con B [valore] (cioè, ovunque toUpper
sostituito un valore con una versione maiuscola, sostituire la versione maiuscola in B con la parte inferiore- versione del caso da cui è stata convertita). Una volta che hai finito, toLower
restituisce solo B[value]
(e A può essere scartato).
Questo presuppone che si tratti di lettere maiuscole o minuscole che formano una biiezione (che, dovrei aggiungere, non è sempre il caso), ma credo che l'assunto sia implicito nella domanda).
L'unico modo corretto che posso vedere per fare questo è:
int toLower(int c)
{
if(toUpper(c) != c) return c; // keep lowercase characters unchanged
if(!isalpha(c)) return c;
return c - 'A' + 'a'; // nonportable hack, only works for ASCII
}
Tecnicamente, l'ultima riga dovrebbe essere un switch
dichiarazione in piena regola, o qualcosa di simile:
static char lower[] = "abcdefghijklmnopqrstuvwxyz";
static char upper[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
// ...
return lower[strchr(upper, c) - upper];
Perché il lo standard non garantisce che i caratteri alfabetici siano consecutivi nel set di caratteri. Tuttavia, il supporto ASCII è "abbastanza buono" per la maggior parte delle persone.
Non so se i tuoi requisiti richiedono di non utilizzare altre funzioni di libreria standard. Se lo fanno, allora i tuoi requisiti sono molto sfortunati. –
- 1. C#: Confusione circa ToUpper() e ToLower()
- 2. Perché putchar, toupper, tolower, ecc. Prendono un int invece di un char?
- 3. Come funziona .ToUpper()?
- 4. :: tolower vs differenza std :: tolower
- 5. PowerShell ToUpper() nella stringa
- 6. Come si ottiene GetCustomAttributes?
- 7. Funzione tolower per stringhe C++
- 8. Dplyr o Magrittr - tolower?
- 9. Come si chiama questo modello?
- 10. Perché ptr_fun (tolower) non si compila in mingw?
- 11. Aggiornamento raccolta MongoDB utilizzando $ toLower
- 12. Come si ottiene il nome di JsonProperty in JSON.Net?
- 13. Come implementare la "Modalità manutenzione" sul sito Web già stabilito
- 14. Come verificare se id esiste già - codeigniter
- 15. Come testare se esiste già una tabella?
- 16. Come si ottiene l'ultimo giorno del mese?
- 17. Come si ottiene un timestamp in ClojureScript?
- 18. Come si ottiene solo l'URL dai dati
- 19. Come implementare SQLCipher quando si utilizza SQLiteOpenHelper
- 20. Come si ottiene un const_iterator usando auto?
- 21. Come si ottiene ANativeWindow da SurfaceTexture nell'NDK
- 22. Come si ottiene Scalatest in Eclipse?
- 23. Come si ottiene l'indirizzo ethernet usando Java?
- 24. Come si ottiene lo stato della stampante?
- 25. Come si ottiene l'intestazione 'referer' in PHP?
- 26. Come si ottiene l'output di questo programma?
- 27. Come posso verificare se sono già state lanciate delle eccezioni?
- 28. Come si ottiene il tipo di valore in Scheme?
- 29. Come si può implementare OO in Lua?
- 30. django 1.7 migrazione ottiene errore "tabella esiste già"
'toupper' e' tolower' sono 'int tolower (int)', non 'int tolower (char)'. –