Vinzenz Mai: C-Arrays und Stringverarbeitung

Beitrag lesen

Hallo Christoph,

also char zeichentabelle[4]; ?

ja, das ist ein Array, das vier Elemente vom Typ char aufnehmen kann.
naja das reicht für das beispiel ^^

wie definiere ich ein Array, mit welchem ich ein zeichen durch drei ersetzen kann?
JS-Beispiel:
var array = new array();
array["a"] = "001";
array["b"] = "002";
array["c"] = "003";

wie kann ich sowas in c realisieren?

Hier ein Beispiel (ich habs in Visual C++ getestet), das Dir eine Möglichkeit aufzeigt. Beachte, dass ich explizit ausnutze, dass ein Zeichen einem Byte entspricht.

Anmerkung:
Alle Kommentare, die angeben, *wie* sich etwas auswirkt, sind zu Lehrzwecken
für Christoph gedacht - und sind normalerweise überflüssig.

  
#include <stdio.h>  
#include <string.h>  
  
int main()  
{  
    // Jedes Byte-Zeichen wird mit einer dreibuchstabigen Zeichenkette ersetzt  
    // Wir benötigen daher ein Array mit 256 Einträgen, die jeweils 4 Byte  
    // aufnehmen können: 3 Buchstaben plus die Terminierung  
    char kodierungstabelle[256][3+1];  
  
    // Puffer für die Eingabe, 80 Nutzzeichen  
    char eingabe[80 + 1] = "";  
    // Puffer für die Ausgabe, 3*80 Nutzzeichen erforderlich  
    char ausgabe[240 + 1] = "";  
    // Anmerkung: potentielle Fehlerquelle, wenn die eine Angabe angepasst  
    //            wird, die andere dagegen nicht.  
  
    // Zählvariable  
    size_t i = 0;  
    // Anzahl der Zeichen im Eingabepuffer  
    size_t anzahl = 0;  
    // maximale Puffergröße  
    size_t maxsize = 80;  
  
    // Zeichenkette, die uns als Test dient.  
    // Ein- und Ausgabe lassen wir noch außen vor :-)  
    char test[] = "Hallo";  
  
    /*  
     * Initialisiere die Kodierungstabelle. Jedes Zeichen erhält als  
     * Kodierung eine dreibuchstabige Zeichenkette, die den Wert des  
     * Bytes mit führenden Nullen in Dezimalschreibweise repräsentiert:  
     *  
     * 0x00 : => "000"  
     * 0x01 : => "001"  
     * ...  
     * 0xFF : => "255"  
     *  
     */  
    for (i = 0; i < 256; i++) {  
        // %03u sorgt für führende Nullen (0) und dreistellige (3)  
        // Ganzzahlen, siehe Handbuch, Formatspezifikationen  
        sprintf_s (kodierungstabelle[i], 4, "%03u", i);  
    }  
  
    // Kopiere die Zeichenkette "Hallo" in den Eingabepuffer  
    strcpy_s(eingabe, test);  
  
    // Ermittle die Anzahl der Nutzzeichen im Eingabepuffer  
    // Beachte: Nullzeichen wird *nicht* mitgezählt  
    anzahl = strnlen(eingabe, maxsize);  
  
    // Kodiere die Nutzzeichen  
    /*  
     * Wir nutzen aus, dass ein Zeichen gerade ein Byte ist  
     * Da es implementierungsabhängig ist, ob der Datentyp char vorzeichenlos  
     * oder vorzeichenbehaftet ist, wandeln wir das Zeichen an der i-ten  
     * Stelle explizit in eine vorzeichenlose Zahl um, so dass der  
     * Wertebereich von 0 bis 255 geht und damit einen gültigen Eintrag in  
     * der Kodierungstabelle angibt.  
     */  
    for (i = 0; i < anzahl; i++) {  
        // Kontrollausgabe  
        printf_s ("Index: %d - Zeichen: %c - Kodierung: %s\n",  
                  i,  
                  eingabe[i],  
                  kodierungstabelle[(unsigned char)eingabe[i]]);  
        // strcat_s hängt ein terminierendes Nullzeichen an, wir brauchen uns  
        // nicht mehr darum zu kümmern.  
        strcat_s(ausgabe, kodierungstabelle[(unsigned char)eingabe[i]]);  
    }  
  
    // Kontrollausgabe, Klartext und Chiffre  
    printf_s("Klartext: %s, Chiffre: %s", eingabe, ausgabe);  
  
    return 0;  
}  

Vielleicht siehst Du jetzt etwas weiter.

Freundliche Grüße

Vinzenz

0 53

C-Arrays und Stringverarbeitung

minicrispie
  • programmiertechnik
  1. 0
    minicrispie
  2. 0
    Vinzenz Mai
    1. 0
      minicrispie
      1. 0
        Vinzenz Mai
        1. 0
          minicrispie
          1. 0
            Vinzenz Mai
            1. 0
              minicrispie
              1. 0
                Vinzenz Mai
              2. 0
                dedlfix
                1. 0
                  minicrispie
                  1. 0
                    Vinzenz Mai
            2. 0

              Gute und schlechte Übersetzungen

              Der Martin
              • sonstiges
              1. 0
                Vinzenz Mai
                1. 0
                  Tom
                2. 0
                  Der Martin
                  1. 0
                    Vinzenz Mai
          2. 0
            Vinzenz Mai
            1. 0
              minicrispie
              1. 0
                Vinzenz Mai
                1. 0
                  minicrispie
                  1. 0
                    Vinzenz Mai
    2. 0
      hotti
      1. 0
        Vinzenz Mai
        1. 0
          hotti
      2. 0
        minicrispie
        1. 2
          Multi
          1. 0
            minicrispie
            1. 1
              Vinzenz Mai
            2. 0
              Multi
    3. 0
      Stefanie
      1. 0
        Harlequin
        1. 0
          Stefanie
          1. 0
            Harlequin
            1. 0
              Tom
            2. 0
              Vinzenz Mai
      2. 0
        Der Martin
        1. 0
          Tom
          1. 0

            Strafe für schwer Lesbares

            Kai345
            • menschelei
            1. 0
              Tom
          2. 0
            Der Martin
          3. 0
            Stefanie
            1. 0
              Harlequin
            2. 0
              Tom
              1. 0
                Stefanie
                1. 0
                  Tom
      3. 0
        Vinzenz Mai
        1. 0
          Tom
  3. 0
    Vinzenz Mai
    1. 0
      minicrispie
      1. 1
        Stefanie
  4. 0
    stareagle
    1. 0
      minicrispie