I caratteri di stringa sono assegnati a un valore numerico nel contesto di come sono assegnati in un linguaggio di programmazione?

4

Per contesto sono abbastanza nuovo per la programmazione dopo il suo ritorno dopo aver programmato un certo numero di anni fa ... Stavo leggendo la programmazione introduttiva di Bjarne con C ++ e mi chiedevo se ai caratteri di stringa alfabetici siano stati assegnati valori numerici ai fini del confronto . Ad esempio in questo esempio del libro Bjarne mostra che le stringhe vengono confrontate analizzando la prima lettera dell'input per le stringhe. Da quello che ho capito, il linguaggio è stato codificato per dare essenzialmente ai caratteri della stringa un valore di ciò che sto assumendo è 1-26 corrispondente all'alfabeto standard degli Stati Uniti per confrontare le lettere.

Ad esempio:

int main()
{
    cout << "Please enter two names\n ";
    string first;
    string second;
    cin >> first >> second;
    if (first<second) 
        cout << first <<"is alphabetically before"<< second <<'\n ' ;
    return 0;
}
    
posta Ryan Lee 31.07.2015 - 01:21
fonte

2 risposte

7
if (first<second) 

In questo caso, qui c'è qualcosa di diverso, operator< da std::basic_string .

and was wondering if alphabetical string characters are assigned numerical values for the purpose of comparison.

No, non proprio. Non si assegna un numero a un carattere solo per confronto . Un computer non sa nulla dei personaggi, un computer conosce solo i numeri. Quale numero rappresenta quale lettera è definita in un set di caratteri, per esempio ASCII è ampiamente conosciuto. Tuttavia, una tabella da sola non aiuta neanche il computer, dal momento che non sa ancora cosa sia un personaggio e cosa dovrebbe fare con esso, quindi, alla fine, è il font che rende il numero 65 sembra un 'A'. Un font è solo un file con un elenco di numeri e immagini (bitmap, vettore, ...) e il computer disegna semplicemente l'immagine che appartiene al numero 65, così come ho già detto, il computer non sa nulla dei caratteri, semplicemente disegna le immagini.

    
risposta data 31.07.2015 - 02:20
fonte
0

Dipende dal linguaggio di programmazione che usi e dal compilatore che stai usando.

I linguaggi C e C ++ definiscono molto poco. Tutto ciò su cui potete fare affidamento - dalla definizione della lingua - è che le cifre da "0" a "9" hanno valori sequenziali. Non è nemmeno possibile fare affidamento su "a" a "z" con valori sequenziali, non solo sulla definizione del linguaggio C e C ++.

Un'implementazione specifica di solito ti dà più garanzie. Ad esempio, la maggior parte delle implementazioni C e C ++ garantiscono che il set di caratteri sia un superset di ASCII (google per ASCII per maggiori informazioni). Un altro esempio, i compilatori che spediscono con Xcode garantiscono che le stringhe C e C ++ a singolo byte contengano caratteri in formato UTF-8 (di nuovo, usa google). Lingue come Java danno molte più garanzie come parte della definizione della lingua.

Ma come nota, l'uso dei codici non è assolutamente sufficiente per un confronto e un ordinamento significativi. L'ordine utile è complicato e speri solo che il sistema operativo fornisca il codice che ti aiuta, perché da solo hai poche possibilità. Ad esempio, il codice naïve ordinerà "Bag" < "Coat" < "anorak" e "Chapter 1" < "Capitolo 10" < "Capitolo 19" < "Capitolo 2". Non ciò che un utente troverà utile.

    
risposta data 31.07.2015 - 23:31
fonte

Leggi altre domande sui tag