Pointer und Schleife

Java The Hutt

Mitglied
Hallo,

weitere folgende Aufgabe:

"Vervollständigen Sie die folgende Funktion abc, die eine Zeichenkette übergeben bekommt und eine Zeichenkette bereitstellt, in der Jedes "A" und "a" durch einen Bindestrich (-) ersetzt wird. Verwenden Sie dazu außschließlich den Zeiger pt (keine anderen Variablen)! Formulieren Sie eine Anweisung im Hauptprogramm, die die Funktion abc(char *txt*) aufuft.

C:
abc(char *txt){
char *pt;
for ( ptr = .....; .......; pt++)
....

Mein Lösungsansatz:
(Ist die Aufgabe damit vollständig abgeschlossen oder gibt es einen einfachere, schnellere Möglichkeit? :)
C:
#include <stdio.h>
#include <conio.h>

char abc(char txt [50])

{

    int i;
    int *ptr;
    ptr = &i;
    for (*ptr = 0; *ptr < 50; (*ptr)++){
            if (txt [*ptr] == 'A'){
        printf("-");
            }else if (txt [*ptr] == 'a'){
               printf("-");
            }else{
        printf("%c", txt[*ptr]);
            }
    }
    return *txt;
}

int main(void)
{


    char txt [50] = {'A','B','a','b','A', 'c' ,'\0'};

    printf("Die Originale Zeichenkette lautet: \t%s\n", txt);
    printf("Nach Umwandlung erhält man:\t\t");
    abc(txt);




    return 0;
}
 
Zuletzt bearbeitet:

mihe7

Top Contributor
Ist die Aufgabe damit vollständig abgeschlossen oder gibt es einen einfachere, schnellere Möglichkeit?
Die Aufgabe ist noch nicht einmal gelöst: "Verwenden Sie dazu außschließlich den Zeiger pt (keine anderen Variablen)!" Der Anfang Deiner Funktion kann exakt so aussehen, wie in dem angegebenen Beispiel. Zum zweiten Teil Deiner Frage: ja, gibt es.
 

Java The Hutt

Mitglied
Ich habe das ganze mit jetztigem Wissen von der vorherigen Aufgabe überarbeitet.

Dabei 2 Fragen, ich weiß, dass es geht, dass man
C:
if (*pt == 'A')
hier noch eine weitere Bedingung hinzufügt, mit && nimmt er diese leider nicht an.
Wie kann das Problem beheben und den Code verbessern?

C:
#include <stdio.h>
#include <conio.h>

char abc(char *txt)
{
    char *pt;
    for ( pt = txt; *pt != 0; pt++)
    {
        if (*pt == 'A')
        {
            printf("-");
        }
        else if (*pt == 'a'){
            printf("-");
        }
        else
        {
            printf("%c", *pt);
        }

    };printf("\n");
}

int main()
{
    char zeichenkette [] = "HAlla\0";

    abc(zeichenkette);


    char eingabe [25];
    printf("Bitte Text eingeben: \t");
    gets(eingabe);
    abc(eingabe);
}
 

mihe7

Top Contributor
hier noch eine weitere Bedingung hinzufügt, mit && nimmt er diese leider nicht an.
Du suchst:
C:
if (*pt == 'A' || *pt == 'a')
Nun noch ein wenig Verwirrung stiften :p:
C:
char *abc(char *txt)
{
    char *pt;
    for ( pt = txt; *pt != 0; pt++) {
        if ((*pt & 0xDF) == 0x41)
            *pt = '-';
    }
    return txt;
}
 

Java The Hutt

Mitglied
Du suchst:
C:
if (*pt == 'A' || *pt == 'a')
Nun noch ein wenig Verwirrung stiften :p:
C:
char *abc(char *txt)
{
    char *pt;
    for ( pt = txt; *pt != 0; pt++) {
        if ((*pt & 0xDF) == 0x41)
            *pt = '-';
    }
    return txt;
}


Genau das suchte ich! Danke dir!
Ich habe noch 2 weitere Aufgaben, jedoch schon Lösungsansätze, wobei ich aber noch 2 Fragen habe.
Die eine zuerst:
Ein Programm enthält folgende Struktur:
(Man soll der Breite den Wert 100 zuweisen, über die Variable fernseher als auch über pt.
Code:
struct fern
{
    char firma[20];
    char modell[25];
    int preis;
    struct gr
    {
        short breite;
        short hoehe;
        short tiefe;
    } groesse;
};

Des weiteren sind folgende Variablen definiert:
C:
struct fern fernseher, *pt=&fernseher;

Ich habe eine Frage bezüglich *pt=&fernseher.
*pt dereferenziert ja die Speicheradresse zu einem Wert.
Also fügt man doch an der Stelle, einen Wert = der Speicheradresse des Fernsehers.?
Ich habe es in meiner Lösung auch mal durchgetestet, da gibts natürlich Probleme, aber woran liegt das, dass es genau so gemacht wird?


C:
    fernseher.groesse.breite = 120;
    printf("Der Fernseher hat die Breite %d cm\n", fernseher.groesse.breite);
    pt->groesse.breite = 100;
    printf("Der Fernseher hat die Breite %d cm", fernseher.groesse.breite);
 

mihe7

Top Contributor
*pt dereferenziert ja die Speicheradresse zu einem Wert.
Hier geht es um eine Deklaration. pt wird als Zeiger auf eine Struktur fern deklariert, dieser wird mit der Adresse von fernseher initialisiert. Ausgeschrieben:
C:
struct fern fernseher;
struct fern *pt;
pt=&fernseher;

woran liegt das, dass es genau so gemacht wird?
Warum man noch einen Zeiger deklariert, oder was meinst Du?
 

Ähnliche Java Themen

Neue Themen


Oben