Strings-Encoding
-
Schreibe ein C-Programm, das einen Text in einen String einliest und diesen Text
a) verfremded bzw.
b) 2 Zeichen im Text vertauscht.
Verfremden
Für das Verfremden des Textes schreibe eine Funktion encodeLine(). Diese soll alle Vokale (a, e, i, o, u) aus dem String entfernen und die Buchstaben umkehren, d.h. aus einem Großbuchstaben wird ein Kleinbuchstabe und umgekehrt.Prototyp: void encodeLine( char * line, char * newLine );
line ist der übergebene String
newLine ist der verfremdete String
Beispiel: "Am Morgen sind die Tannen kupfern. --> M mRGN SND D tNNN KPFRN.
Hinweis:
Die Großbuchstaben A-Z haben den ASCII-Code 97-122. Sie unterscheiden sich nur durch das Bit 25 (dezimaler Wert 32), das bei Kleinbuchstaben gesetzt ist (1) und bei Großbuchstaben nicht(0). Das Leerzeichen hat übrigends den ASCII-Code 32. Das bedeutet, der Buchstabe 'A' hat z.B. den Dezimalwert 65, der Buchstabe 'a' den Dezimalwert 97, also Differenz 32.
ASCII-Code: https://tools.piex.at/ascii-tabelle/
Vertauschen
Für das Vertauschen von 2 Zeichen im Text implementiere die Funktion swapCharsInString(). Diese Funktion erhält als Parameter den String und die Position der beiden Zeichen , die vertauscht werden sollen.Prototyp: int swapCharsInString( char * str, int pos1, int pos2 );
Beispiel: str: Am Morgen, pos1: 4, pos2: 7 --> str: Am gorMen
Hinweis:
pos1 und pos2 müssen innerhalb des Strings liegen. Falls dies nicht der Fall ist , wird als Returnwert 0 zurückgeliefert und keine Vertauschung vorgenommen. Falls vertauscht werden konnte ist der Returnwert 1.
-
Das ist das was ich bis jetzt habe:
#include <stdio.h> #include <stdlib.h> #include <string.h> #define MAXSL 81 void encodeLine (char *line, char *newLine); int swapCharsInString (char *str, int pos1, int pos2); int main() { char line[MAXSL]; char newLine[MAXSL]; char str; int pos1, pos2; printf ("\nStrings - Encoding"); printf ("\n------------------"); printf ("\nText verfremden und Zeichen vertauschen"); printf ("\nText eingeben (max.80 Zeichen):\n"); fgets (line, MAXSL, stdin); encodeLine (line, newLine); printf ("%s", newLine); printf ("\n\nPosition 1 des zu vertauschenden Zeichens: "); scanf ("%d", &pos1); printf ("\nPosition 2 des zu vertauschenden Zeichens: "); scanf ("%d", &pos2); str = line[MAXSL]; swapCharsInString (&str, pos1, pos2); printf ("\n\n"); return EXIT_SUCCESS; } void encodeLine (char *line, char *newLine) { } int swapCharsInString (char *str, int pos1, int pos2) { }
-
Ja und? Hast du eine Frage?
-
@manni66 ja, ich weiß nicht, wie ich die Funktionen schreiben soll.
-
@MyWinMyChoice sagte in Strings-Encoding:
@manni66 ja, ich weiß nicht, wie ich die Funktionen schreiben soll.
Also lautet die Frage: macht mir einer meine Hausaufgaben?
-
@manni66 nein nur weil wir es in der schule nicht gemacht haben und uns es selber beibringen haben müssen wegen corona weiss ich nicht wie ich das machen soll
-
@MyWinMyChoice sagte in Strings-Encoding:
@manni66 nein nur weil wir es in der schule nicht gemacht haben und uns es selber beibringen haben müssen wegen corona weiss ich nicht wie ich das machen soll
Hör auf zu jammern. Du hast nichts selber versucht.
-
@manni66 Bist du blind oder siehst du das programm nicht
alles was oben programmiert ist hab ich geschrieben und ich brauche mit meinen antworten nicht so lange
du brauchst für 2 Wörter 1 Stunde und wenn ich schreibe kommt ein ganzer text in wenigen sekunden
-
@manni66 und zum thema jammern: ich jammere nicht ich frage nur und wenn nicht solche spasten wie du hier sind geben sie mir auch eine vernünftige antwort
mir kommt es vor als könntest du garnicht programmieren und bist nur hier um andere personen niederzumachen
-
Naja, die beiden Funktionen, die du schreiben sollst, sind komplett leer und aus der Aufgabenstellung abgeschrieben. Würdest du wirklich sagen, das ist Eigeninitiative? Und deine Frage ist auch nicht, wie du irgendetwas bestimmtest machst, sondern wie man diese Funktionen implementiert, also wie man deine Aufgabe macht.
-
@SeppJ Es sind nur die Funktionen die wir bekommen haben, aber das komplette andere Programm hab ich selber geschrieben
-
@MyWinMyChoice sagte in Strings-Encoding:
str = line[MAXSL];
Das ist undefiniertes Verhalten, da es das Element MAXSL in line nicht gibt.
(Der Index fängt bei 0 an)Schreib doch erstmal eine Funktion, die Groß/Kleinbuchstaben vertauscht.
Dazu wirst du sicher eine Schleife brauchen.Viel Einfacher ist jedoch die zweite Aufgabe.
Keine Schleife, eine Variable.
-
@MyWinMyChoice sagte in Strings-Encoding:
str = line[MAXSL]; swapCharsInString (&str, pos1, pos2);
Wie viele Elemente hat
line
. Welche Adresse bekommst Du mit&str
?
-
@SeppJ Es ist nur das Problem dass ich nicht weiss wie ich die Selbstlaute aus den String herausbekomme
-
@MyWinMyChoice sagte in Strings-Encoding:
Es ist nur das Problem dass ich nicht weiss wie ich die Selbstlaute aus den String herausbekomme
Dann mach erstmal den Rest.
-
@Swordfish line hat 80 zeichen die man eingeben kann und auf danach schreibe ich line auf str
-
-
@Swordfish auf die maximalen Zeichen die man verwenden kann beim eingeben von line
-
Worauf greifst Du mit
line[0]
zu?
-
@Swordfish wo steht das