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