Dołączanie napisu do tekstu

0

Cześć,

chciałem stworzyć funkcję, która na początku dowolnego tekstu doda jakiś inny tekst.

#include <cstdlib>
#include <iostream>
#include <cstring>

using namespace std;

char* fun(char* tab);
int main(int argc, char** argv)
{
    char napis[] = { "i tekst drugi." };

    char* a = fun(napis);

    cout << a;

    return 0;
}

char* fun(char* tab)
{
    char tablica[] = { "Tekst pierwszy " };
    char* txt = tablica;

    while (*(txt++));
        

    txt--;

    while ((*(txt++) = *(tab++)));
        
    return txt;
}

Wykonanie programu nie zwraca żadnej wartości.
Czy jest ktoś w stanie mi powiedzieć, gdzie popełniłem błąd?

2

magic alert!

std::string greetings = "world!";
greetings = std::string("hello ") + greetings;
0

Chciałem zrobić to zadanie:

Napisz funkcję, która wywoływana jest z dwoma argumentami. Pierwszy to wskaźnik do tablicy znaków, w której jest już jakiś C-string. Drugi to rozmiar tej tablicy. Funkcja ta ma do początku bieżącej treści tablicy znaków dopisać tekst: "Uwaga: ".
Jeśli w rezultacie powstałby C-string dłuższy, niż na to pozwala obecny rozmiar tablicy znaków - niech trzy ostatnie możliwe znaki zostaną zatąpione trzema kropkami.
Jako rezultat swej pracy funkcja ma zwracać wskaźnik do tablicy znaków, na której dokonała zmiany.

Nie potrafiłem jednak wykonać samej funkcji, która by dodawała C-string. Jak już mi się to uda, wtedy pokombinuję z drugim argumentem funkcji - rozmiarem.

0

Do łączenia cstringow służy funkcja strcat.

Funkcja ma przyjmować dwa argumenty a przyjmuje jeden.

2

Zakładamy, że nie uzywasz std::string

Masz tablicę char[7] i masz tekst w niej "abcd\0". \0 kończy każdy ciąg znaków. (4 znaków o indexach 0,1,2,3). indexy 4,5,6 są do dyspozycji.
Długość możesz obliczyć:

  1. Funkcją strlen()
  2. Własna funkcją.
  • Polega to na pętli liczącej znaki od początku tablicy do napotkania znaku \0 kończącego tekst.

Załóżmy, że znasz rozmiar tablicy oraz długość tekstu (wyżej wspomniana funkcja do obliczenia). Chcesz dodać tam tekst np. "abc" (długość 3). Widać, że oba teksty (dł. 4 + 3 = 7) nie zmieszcza sie do tablicy (rozmiar 7), ponieważ musimy jeszcze znaleźć 1 bajt dla znaku \0.
Rozwiązanie:

  1. dynamiczna tablica
  2. tablica o wystarczającym rozmiarze.

Przypadek, gdy mamy dużą tablicę:
char[20] o tekście "abcd\0";

W takim zestawieniu zmieścimy tam tekst "abc".
Rozwiązanie:

  1. Obliczasz długość tekstu starego (L1 = 4) i długość tekstu nowego (L2 = 3)
  2. za pomocą petli wstawiasz nowy tekst:
    char[L1+1+n] = nowy_tekst[n];
    Na koniec wstawiasz znak \0
  3. Pamietaj, aby do funkcji przekazac wskaźnik do tablicy znaków.

========
Jeżeli piszesz w c++ uzyj jednak string

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