przekopiowanie stringu do stringu

0

Mam takie zadanie:

Napisz funkcję, która do końca stringu będącego w jednej tablicy, dołączy string będący w drugiej tablicy. Argumentami tej funkcji powinny być:

  • adres tablicy docelowej,
  • jej rozmiar,
  • adres tablicy ze stringiem dołączanym.
    Funkcja powinna przerwać dołączanie stringu w przypadku zapełnienia całej tablicy.

Mógłby ktoś pomóc ? Nie mam pomysłu jak rozpisać funkcję

#include <iostream>
using namespace std;

void funkcja(char docelowa[], int rozmiar_docelowy, char dolaczana[]);

int main()
{
	int const rozmiar = 100;
	char tablica1[rozmiar] = { "Uwaga na wyjscie " };
	char tablica2[] = { "tam jest wilk " };
	
}

void funkcja(char docelowa[], int rozmiar_docelowy, char dolaczana[])
{


} 
2
  1. znajdujesz koniec pierwszego napisu - szukasz w tablice '\0'
  2. dopóki nie natrafisz na koniec drugiej tablicy lub nie skończy się pojemność pierwszej - kopiujesz kolejny znak
  3. jeżeli w pierwszej tablice jest jeszcze miejsce - dopisujesz znak koca napisu - czyli '\0'
0

Wymyśliłem coś takiego, choć dziwnie to wygląda i nie działa, próbuje jakoś inaczej. Czy ma sens jakiś ten kod:

#include <iostream>
using namespace std;
 
void funkcja(char docelowa[], int rozmiar_docelowy, char dolaczana[]);
 
int main()
{
    int const rozmiar = 100;
    char tablica1[rozmiar] = { "Uwaga na wyjscie " };
    char tablica2[] = { "tam jest wilk " };

	funkcja(tablica1, 100, tablica2);
	cout << tablica1;
	system("pause");
 
}
 
void funkcja(char docelowa[], int rozmiar_docelowy, char dolaczana[])
{
	for(int i = 0, k; i < rozmiar_docelowy; i++)
	{
		docelowa[i];
		if(docelowa == '\0' )
		{
			int k = 0;
			docelowa[i] = dolaczana[k];
			k++;
			if(docelowa == '\0') break;
		}

	}
}  
0

Nawet z opisu widać że w pkt 1 musi być pętla i w pkt 2 musi być pętla.
No chyba że możesz użyć funkcji standardowych: http://www.cplusplus.com/reference/cstring/strncat/

void funkcja(char docelowa[], int rozmiar_docelowy, const char dolaczana[]) { strncat(docelowa,dolaczana,rozmiar_docelowy); }
0

deklarujesz k w for, a następnie ją redeklarujesz po ifie... w ifie pytasz czy docelowa='\0' ale tak nigdy nie będzie bo to tablica. musisz odwołać się do elementu tablicy. w samym ifie robisz znów kolejne zbędne sprawdzanie.

Spróbujmy więcej sensu temu nadać, ok?

void funkcja(char docelowa[], int rozmiar_docelowy, char dolaczana[])
{
    for(int i = 0, k=0; i < rozmiar_docelowy; i++)
    {
        if(docelowa[i] == '\0')
        {
            docelowa[i] = dolaczana[k];
            k++;
            if(dolaczana[k] == '\0') {
              docelowa[i+1]='\0';
              break;
            }
        }
    }
}  

No i co to dobrego zrobi? ano jeśli masz farta i wszystko po końcu ciągu będzie wypełnione zerami to całość przekopiuje... Ale serio, takie kopiowanie jest dziwne... I niepotrzebnie sobie marnujemy czas na pętlenie się po docelowej zanim nie ma końca... To może standard C? wystarczy zaincludować string.h (albo cstring jeśli robisz w c++) i dostajemy strlen, który nam powie gdzie jest \0. A jak już mamy standard to wszystko można, w tym to co potrzebujesz jedną funkcją - http://pl.wikibooks.org/wiki/C/strcat

//EDIT:
jeśli nie możesz kokoRZystaćystać ze strandardu C, a musisz pętlami - while byłby lepszy. for to taki młotek, a jak masz młotek to wszystko jest gwoździem ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1