2 Char-Datentypen verknüpfen mit hilfe von Pointer



  • Hallo,

    ich sitze gerade vor ein Problem. Ich habe 2 Char-Zeichenkennen mit jeweils einem X beliebigen Text. Laut einer Hörsaalüber von meiner UNI muss das mit einem Pointer gehen, aber Pointer kann man nicht addieren.

    Aufgabe:
    Hörsaalübung:
    Realisieren Sie eine Funktion
    char * strnCat(char *s1, char * s2, int n)
    Diese Stringfunktion hängt an den Zielstring s1 die durch den Quellstring s2 bezeichnete, nullterminierte Zeichenfolge an. Dabei werden maximal n Elemente kopiert. Werden mittel n mehr Zeichen angegeben, als in s2 vorhanden sind, endet die Kopie bei der Nullterminierung des Quellstrings.
    Als Rückgabewert liefert die Funktion einen Zeiger auf das erste Zeichen des Zielstrings.

    Vielen Dank.

    Gruss,
    Cyrill



  • Hallo

    leg intern Speicher für ein char* an, mit minestens strlen(s1) + strlen(s2) aber maxiaml n. Dort kannst du dann einzeln die Chars von s1 und s2 reinkopieren.
    Zum Schluß gibst du den neuen char* zurück.

    bis bald
    akari



  • akari schrieb:

    leg intern Speicher für ein char* an, mit minestens strlen(s1) + strlen(s2) aber maxiaml n. Dort kannst du dann einzeln die Chars von s1 und s2 reinkopieren.
    Zum Schluß gibst du den neuen char* zurück.

    nö, das wär falsch. die funktion muss alles an's ende von *s1 anhängen. wenn zu wenig speicher da ist, oder n zu gross ist, darf sie auch abstürzen.



  • So funktionierts:

    #include <iostream>
    using namespace std;
    
    char *strnCat(char *s1, char *s2, int n);
    
    int main (void)
    {
    	char zielstring[255] = "Alle meine Entchen" ;
    	char quellstring[30] = " schwimmen auf dem See," ;
    	strnCat(zielstring, quellstring, 9);
    	cout << zielstring << endl;
    	return 0;
    }
    
    char *strnCat(char *s1, char * s2, int n)
    {
    
    	int b = strlen(s1);
    
    	for (int a = 0; a <= n; a++)
    	{
    
    		s1[b + a] = s2[a];
    	}
    	return 0;
    }
    


  • das 'strlen' kannste aber sparen. guckst du: http://cm.bell-labs.com/sources/plan9/sys/src/libc/port/strncat.c
    ausserdem prüfst du nicht ob s2 kürzer ist als n
    und der rückgabewert ist auch nicht richtig



  • Unser vorgebener Quellcode:

    #include <iostream> 
    using namespace std; 
    
    char *strnCat(char *s1, char *s2, int n); 
    
    int main (void) 
    { 
        char zielstring[255] = "Alle meine Entchen" ; 
        char quellstring[30] = " schwimmen auf dem See," ; 
        strnCat(zielstring, quellstring, 9); 
        cout << zielstring << endl; 
        return 0; 
    } 
    
    char *strnCat(char *s1, char * s2, int n) 
    {
    

    Da der Returnwert hier egal ist habe ich return 0 angegeben.



  • Egal ist beim Programmieren äusserst selten etwas.

    Wenn der Returnwert immer gleich ist, verwende keinen Returnwert. Wenn Du einen verwendest, verwende ihn sinnvoll.

    EDIT:
    Im Übrigen ist 0 voll an der Aufgabenstellung (letzter Satz) vorbei...



  • DragonShaolin schrieb:

    Als Rückgabewert liefert die Funktion einen Zeiger auf das erste Zeichen des Zielstrings.

    wenn du das ignorierst gibbets aber punktabzug 😉



  • Stimmt das hab ich überlesen 🙂

    Aber wenn der Rückgabewert das erste Zeichen des Zielstrings sein soll, wie mache ich das denn?

    return s1[0] funktioniert nicht, da es probleme mit der konvertierung gibt.



  • DragonShaolin schrieb:

    Aber wenn der Rückgabewert das erste Zeichen des Zielstrings sein soll, wie mache ich das denn?

    es soll ein *pointer* auf das erste zeichen sein. wenn du die aufgaben nicht richtig liest dann wird das sowieso nix


Anmelden zum Antworten