Łańcuchy znaków - string

0

Mam taki problem mam napisać kod który przekopiuje zawartość tab1 i tab2 do tab3

char tab1[20]="ogniem i mieczem";
char tab2[20]="patykiem i wodą";
char tab3[100];

i wyświetli mi

ogniem i mieczem patykiem i wodą

wiem ze jak zrobię tak

for(i=0; tab1[i]!=NULL; i++)
{
                tab3[i]=tab1[i];
}
tab3[i]=NULL;

to elegancko kopiuje tab1 do tab3 ale jak dołożyć druga tablice to już nie daje rady

0

Da radę jak zrobisz to poprawnie. Pokaż jak kopiujesz drugą tablicę

0

Zamiast Od razu zakończyć łańcuch po tej pętli wstaw znak spacji, a potem przypisz resztę stringa.

while(tab3[i] = tab1[i++]);
tab3[i - 1] = " ";
int j = 0;
while(tab3[j + i] = tab2[j++]);
0
  char tab1[20]="ogniem i mieczem";
  char tab2[20]="patykiem i wodą";
  char tab3[100];

  char* p = tab3; // wskazuje na aktualny znak w tekscie wynikowym (znak 0)
  char* t = tab1; // wskazuje na pierwszy znak w tekscie tab1

  while (*t) // dopoki znakw w tekscie 3 jest rozny od 0
    *p++ = *t++; // przepisz znak, zwiesz oba wskazniki

  t = tab2; // wskazuje na pierwszy znak w tekscie tab2

  while (*t) // dopoki znakw w tekscie 2 jest rozny od 0
    *p++ = *t++; // przepisz znak, zwiesz (przesun) oba wskazniki

  *p = 0; // zakoncz tekst

jeszcze można tak:
sprintf(tab3,"%s%s",tab1,tab2);

0

Sorki, że nie odpisywałem ale musiałem uczyć się czegoś innego.
A propos tych łańcuchów dałoby się to jakoś jaśniej wytłumaczyć?? Nie czuje tego

jedyne co mi do głowy przychodzi

{
        int i, j;
        char tab1[20]="ogniem i mieczem";
        char tab2[20]="patykiem i wodą";
        char tab3[100];

        for(i=0; tab1[i]!=NULL; i++)
        {
                tab3[i]=tab1[i];

        }
        tab3[i]=NULL;

        printf("%s", tab3);

        printf(" %s \n", tab2);

        system("pause");

        return 0;
}

ale to chyba nie oto w tym chodzi

0

MJay już ci podał rozwiązanie. W tym co ty przedstawiłeś nie skopiowałeś drugiej tablicy tylko ją wyświetliłeś. Więc wyjście będzie takie samo ale działanie zupełnie inne.

Końcem C-stringa jest bajt zerowy (używany jako znacznik). Więc robisz tak.

  1. Kopiujesz tab1 do tab3.
  2. W miejsce bajtu zerowego który się skopiował wpisujesz spacje ' '.
  3. Następnie dalej kopiujesz do tab3 tab2.
  4. Wyświetlasz całość z tab3.

Przeczytaj sobie o C-stringach, czym są i co oznacza ich koniec.

0

to co MJay napisał nie chce działać
tab3[i - 1] = " "; ta linijka ma błąd

0

U mnie to działa

    int i = 0;

    while(tab3[i] = tab1[i++]);
    tab3[i - 1] = ' ';
    int j = 0;
    while(tab3[j + i] = tab2[j++]);

    cout << tab3;
0

On pisze w C a nie w C++ zapewne, dlatego definicje i i j powinny być u góry a wypisanie powinno być printf("%s", tab3); i tak jak zauważył Tattva powinno być ' ' zamiast " "

0

zrobiłem tak

{
        int i;
        int j=0;
        char tab1[20]="ogniem i mieczem";
        char tab2[20]="patykiem i wodą";
        char tab3[100];

        for(i=0; tab1[i]!=NULL; i++)
        {
                tab3[i]=tab1[i];

        }

        while(tab3[i] = tab1[i++])
        {
                tab[i-1] = ' ';
        }

        while(tab3[j + i] = tab2[j++])
        {
                printf("%s", tab3);
        }

        system("pause");

        return 0;
}

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