2016-08-06 30 views
0

Also ich brauche das in C passieren, habe darüber eine Stunde oder so nachgedacht und kann nicht herausfinden, wie es geht, oder wie man Google etwas genaues fragt, es muss mit jedem eingegebenen Buchstaben funktionieren.Kodierung eines Alphabets in C, das Vorher- und Postbriefe zeigt

Wie berechne ich den nächsten und vorherigen Buchstaben im Alphabet für einen bestimmten Buchstaben? Hier

ist ein Link: http://imgur.com/bRdLonZ

enter image description here

+3

Sie können Arithmetik für Char-Variablen ausführen. Zum Beispiel gibt 'H' - 1 Ihnen 'G' – samgak

+2

Wie bei allen anderen Computern werden Buchstaben mit Zahlen dargestellt, was bedeutet, dass Sie diese Zahlen addieren und subtrahieren können. Der älteste (ich denke) und grundlegendste Standard der Nummer <--> Buchstaben Mapping ist ASCII. Eine schnelle Google-Suche wird Ihnen die ASCII-Codes mitteilen. Sieh dir das auch an: https://unmad.in/conv_guide/ch01.html – yano

+0

@samgak Es kommt auf das jeweilige Alphabet an. Eine allgemeinere Lösung erfordert eine explizite Sequenz (z. B. eine Zeichenfolge) für das relevante Alphabet. Und natürlich sind einige Buchstaben, die im Schriftsystem für eine Sprache verwendet werden, nicht im Alphabet der Sprache (und das gilt für Englisch). –

Antwort

0

Bitte diese Probe überprüfen, die tun sollten, was Sie wollen. Sie müssen bedenken, relative Positionen zu denken, denn AZ in der Mitte des ASCII ist und in den Buchstaben A und Z um die Ränder zu gehen zu erinnern, so dass A nach Z und Z vor A.

#include <stdio.h> 
#include <ctype.h> 

int main() { 
    int resp; 
    printf("Please input an uppercase letter: "); 
    resp = getchar(); 
    int i = resp; 
    if ((resp - 1) < 'A') 
     i = resp + 26; 
    printf("The lowercase version of the letter is: %c\n", tolower(resp)); 
    printf("The letter %c comes before the letter %c in the alphabet \n", i - 1, resp); 
    i = resp; 
    if ((resp + 1) > 'Z') 
     i = resp - 26; 
    printf("The letter %c comes after the letter %c in the alphabet \n", (i + 1), resp); 
    printf("%c is letter nr %d in the alphabet \n", resp, resp - 'A' + 1); 
} 

-Test ist

0

Obwohl Dac Saunders schon eine nette Erklärung und eine gute Skizze gegeben hat, denke ich, dass ein zweites, etwas anderes Beispiel hilfreich sein könnte.

// for printf() and puts() 
#include <stdio.h> 
// for exit() and the macro EXIT_SUCCESS 
#include <stdlib.h> 
// for tolower() and isupper() 
#include <ctype.h> 

// All calculations assume ASCII encoding! 

int main() 
{ 
    char letter; 

    puts("Alphabet Facts!"); 
    puts("^^^^^^^^^^^^^^^"); 

    // You want an upper case letter as the input, so check for it 
    do { 
    printf("\nPlease input an uppercase letter: "); 
    letter = getc(stdin); 
    // swallow new-line(s) 
    getc(stdin); 
#ifdef _WIN32 
    getc(stdin); 
#endif 
    } while (!isupper(letter)); 

    printf("\nSome interesting facts:\n\n"); 

    printf(" 1) The lowercase version of the letter is '%c'.\n\n", tolower(letter)); 
    if (letter == 'A') { 
    // or print 'Z' if you want it to mimic a circle 
    printf(" 2) No letter comes before '%c' in the alphabet.\n", letter); 
    } else { 
    printf(" 2) The letter '%c' comes before '%c' in the alphabet.\n\n", letter - 1, letter); 
    } 
    if (letter == 'Z') { 
    // or print 'A' if you want it to mimic a circle 
    printf(" 3) No letter comes after '%c' in the alphabet.\n\n", letter); 
    } else { 
    printf(" 3) The letter '%c' comes after '%c' in the alphabet.\n\n", letter + 1, letter); 
    } 
    // 'A' is at position 64 in the table of the ASCII encoding but we don't need to 
    // look it up, we can use the letter itself because a 'char' is a number, too. 
    // The ASCII table is zero based--we need to subtract unity from 'A' or add unity 
    // after the subtraction of 'A'. 
    printf(" 4) %c is letter number %d in the alphabet!\n\n", letter, letter - ('A' - 1)); 
    // return the special number to the OS that tells it that no error occured. 
    exit(EXIT_SUCCESS); 
}