Registrierung Kalender Mitgliederliste Teammitglieder Suche Häufig gestellte Fragen Zur Startseite

Informatiker Board » Themengebiete » Theoretische Informatik » formale Sprachen » Funktion Zeiger auf eine Zeichenkette » Antwort erstellen » Hallo Gast [Anmelden|Registrieren]

Antwort erstellen
Benutzername: (du bist nicht eingeloggt!)
Thema:
Nachricht:

HTML ist nicht erlaubt
BBCode ist erlaubt
Smilies sind erlaubt
Bilder sind erlaubt

Smilies: 21 von 33
smileWinkDaumen hoch
verwirrtAugenzwinkerngeschockt
Mit ZungeGottunglücklich
Forum Kloppebösegroßes Grinsen
TanzentraurigProst
TeufelSpamWillkommen
LehrerLOL HammerZunge raus
Hilfe 
aktuellen Tag schließen
alle Tags schließen
fettgedruckter Textkursiver Textunterstrichener Text zentrierter Text Hyperlink einfügenE-Mail-Adresse einfügenBild einfügen Zitat einfügenListe erstellen CODE einfügenPHP CODE farbig hervorheben
Spamschutz:
Text aus Bild eingeben
Spamschutz

Die letzten 10 Beiträge
Lycaner

Ok. Alles verstanden. Danke.
Karlito

OK.

Welchen Wert !k annimmt, hängt davon ab, welchen Wert k vorher hatte. Für k = 0 ist !k = 1 und für alle anderen Werte ist !k = 0.

VG,

Karlito
Lycaner

Es war die gesamte Aufgabenstellung.

!k ist aus einer anderen Aufgabe. Ich bereite mich für eine Klausur vor und rechne die alte Klausuren durch. Deswegen habe ich auch so viele Fragen und nicht so viel Zeit, das selber aus den Büchern oder Google zu erarbeiten, obwohl es für die Klausur besser wäre.
Karlito

Hallo,

Zitat:
Original von Lycaner
Tja, jetzt bin ich etwas verwirrt, eigentlich macht die Funktion nichts und die gibt nur ein Zeichen aus, weil man in printf %c und nicht %s benutz.


Das hast du falsch verstanden! %c gibt das Ascii-Zeichen zu einem 8-Bit-Wert zurück. Du könntest auch
printf("%c\n", 0x41); schreiben. Das Würde dann einfach ein "A" ausgeben. Es ist also abhängig von einem Konkreten Wert.

%s hingegen nimmt einen Zeiger entgegen und liest ab der Adresse des Zeigers die Werte Byteweise aus dem Speicher und stellt diese als Zeichenkette dar bis es auf den Wert 0 trifft.

Zitat:
Original von Lycaner
Mit der Funktion kann man nur den erste Buchstaben ausgeben und nur einen Buchstaben. Ich dachte muss eine Funktion schreiben, die auch in der Lage ist beliebiges Zeichen aus der Zeichenkette auszugeben.


Nicht laut der Aufgabenstellung die du geschickt hast... Vlt hast du nicht die gesamte Aufgabenstellung geschickt?

Um das Verständnis zu verbessern könntest du ja mal rausfinden, wie du das ein beliebiges Zeichen ausgeben kannst, aber ohne die Funktion xy zu verändern. Dazu musst du den Wert des Zeigers (Die Adresse), den Du an xy übergibst, verändern.

Zitat:
Original von Lycaner
Kurze Frage am Rande !k ist immer null oder?


Woher nimmst du !k?

VG,

Karlito
Lycaner

Tja, jetzt bin ich etwas verwirrt, eigentlich macht die Funktion nichts und die gibt nur ein Zeichen aus, weil man in printf %c und nicht %s benutz. Mit der Funktion kann man nur den erste Buchstaben ausgeben und nur einen Buchstaben. Ich dachte muss eine Funktion schreiben, die auch in der Lage ist beliebiges Zeichen aus der Zeichenkette auszugeben.
Kurze Frage am Rande !k ist immer null oder?
Karlito

Hallo.

ich weiß nicht genau wo dein Fehler ist... Die Variable Zeiger war in der Funktion main nicht bekannt. Noch ein Fehler der sich leider eingeschlichen hat... Das passiert wenn man nicht testet.

Um weitere Missverständnisse zu verhindern, hier die lauffähige Variante.

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
#include <stdio.h>

char xy( char *Zeiger);

int main (void) {
  char Zeichenkette[100];

  scanf("%s", Zeichenkette);
  printf(" Erster Buchstabe der Zeichenkette ist %c\n",xy(Zeichenkette));

  return 0;
}

char xy( char *Zeiger){
	return Zeiger[0];
	//return *Zeiger; //liefert das selbe
}


Sorry für die Umstände. Wenn etwas unklar ist, kannst du natürlich gern nachfragen.

VG,

Karlito
Lycaner

char xy( char *Zeiger){
char e;
e=*Zeiger;
}

Wenn ich das, als Funktion eingebe, gibt er nur den Fehler im Hauptprogramm, dass er diese Funktion nicht kennt(
Karlito

Zitat:
Original von Lycaner
Tja, ich habe jetzt das geschrieben. Ist auch falsch.
char xy( char *Zeiger[100]){
char *e;
*e=*Zeiger[0];
return *e;


Das ist ziemliches Kauderwelsch, aber auch meine Schuld. S.u.

Zitat:
Original von Lycaner
Und wenn *Zeiger und Zeiger[] gleich ist, ist *Zeiger[] nicht doppelt deklariert?


Du hast vollkommen recht. Da war ich etwas schlampig... Es müsste heißen:

code:
1:
2:
3:
char xy( char *Zeiger);


Vielleicht ginge auch
code:
1:
2:
3:
char xy( char Zeiger[]);


Das weiß ich nicht genau. Jedenfalls musst du im Anschluss nur das erste Element des "Arrays" zurückgeben. Eine neue Variable brauchst du dafür nicht. Den Funktionskopf musst Du dementsprechend auch anpassen.

Zitat:
Original von Lycaner
Wenn ich Zeiger [0] schreibe, damit nur der erster Zeichen von der Zeichenkette kommt, woher weist das Programm, dass ich nicht eine Zeichenkette mit 0Zeichen meine?


Das weiß das Programm nicht. Das musst Du durch geeignete Prüfungen sicherstellen, bevor du die Funktion aufrufst.

Anmerkung: Leere Zeichenkette nicht mit uninitialisiert verwechseln. Sollte die Zeichenkette nur die Länge 0 haben, so wäre der Rückgabewert der Funktion schlichtweg 0, da Zeichenketten in C ja immer durch 0 bzw '\0' terminiert werden. Ist die Zeichenkette uninitialisiert erhältst du einen Zufälligen Wert... Das gilt es auf jeden Fall zu vermeiden. So wie die main momentan implementiert ist, kann die Zeichenkette ja aber nicht uninitialisiert sein.

VG,

Karlito
Lycaner

Tja, ich habe jetzt das geschrieben. Ist auch falsch.
char xy( char *Zeiger[100]){
char *e;
*e=*Zeiger[0];
return *e;

Wenn ich Zeiger [0] schreibe, damit nur der erster Zeichen von der Zeichenkette kommt, woher weist das Programm, dass ich nicht eine Zeichenkette mit 0Zeichen meine?
Und wenn *Zeiger und Zeiger[] gleich ist, ist *Zeiger[] nicht doppelt deklariert?
Karlito

Das war der falsche Schluss... Deine main war fast richtig. Du musst nur an die Funktion xy Zeichenkette übergeben und nicht *Zeichenkette. Du brauchst auch xy nicht 2 mal aufrufen. Ich gebe dir mal die main vor:

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
#include <stdio.h>

char xy( char *Zeiger[]);
  int main (void) {
  char Zeichenkette[100];

  scanf("%s", Zeichenkette);
  printf(" Erster Buchstabe der Zeichenkette ist %c",xy(Zeiger));

  return 0;
}


Du musst jetzt nur noch die Funktion xy implementieren.

VG,

Karlito
Es sind weitere Beiträge zu diesem Thema vorhanden. Klicken Sie hier, um sich alle Beiträge anzusehen.