Zeichenketten, Zeiger



  • Hallo,

    Es geht darum eine Funktion zu schreiben die höchstens n Zeichen der Zeichenkette t an das Ende der Zeichenkette s anhängt. Wenn t weniger als n Zeichen enthält, wird mit '\0' aufgefüllt. Der Parameter s wird als Funktionsergebnis zurückgegeben. Es darf allerdings keine Funktion aus <cstring> verwendet werden. Ich habs mal probiert. Ist wahrscheinlich nicht gerade der effizienteste Ansatz und eben genau darum geht es. Vielleicht könnt ihr mir helfen ein gute Lösung zu finden.

    char* strncat(char* s, char* t, int n)
    {      
        int i=0; 
    
        while(s[i] != '\0')
        {
          i++;
        }
    
        int k=0;
        int j=i;
        for(j; j<i+n; j++)
        {
          if(t[k] == '\0')
          {
              for(int l=j; l<i+n; l++)
                s[l] = '\0';
              return s;
    
          }
          else
             s[j] = t[k];
          k += 1;
        }
    
        s[j+n] = '\0';
    
        return s;
    }
    


  • Ist zwar schon ewig her, dass ich mal 'ne strncat Implementierung geschrieben habe, aber glücklicherweise habe ich den Code noch.

    char* strncat(char* destination, const char* source, size_t count)
    {
    	const char* src = source;
    	char* dest = destination;
    	while (*dest != '\0')
    		++dest;
    	const char* end = src + count;
    	while (src != end && *src != '\0')
    	{
    		*dest = *src;
    		++src;
    		++dest;
    	}
    	*dest = '\0';
    	return destination;
    }
    // keine garantie auf korrektheit
    

    Ist allerdings eine standardkonforme C Implementierung. Dh, das Auffüllen mit '\0' wird nicht gemacht. Kann man aber relativ leicht einbauen.



  • char* strncat(char* s, const char* t, int n)
    {
    	int i, sn=0;
    
    	for(;*s != 0;++s,++sn);
    	--s;
    
    	for(i=0; *t!=0 && i<n; ++i, ++t)
    		*(++s) = *t;
    
    	do
    		*(++s) = 0;
    	while(++i<n);
    
    	return s - sn - i + 1;
    }
    


  • derb ihr habt den dreh aber raus!


Anmelden zum Antworten