Dołączanie napisu do tekstu

Odpowiedz Nowy wątek
2016-05-20 17:34
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?

edytowany 1x, ostatnio: norbas, 2016-05-20 17:34

Pozostało 580 znaków

2016-05-20 17:38
2

magic alert!

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

Pozostało 580 znaków

2016-05-20 17:55
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.

edytowany 4x, ostatnio: norbas, 2016-05-20 17:56

Pozostało 580 znaków

2016-05-20 18:59
0

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

Funkcja ma przyjmować dwa argumenty a przyjmuje jeden.


Pozostało 580 znaków

2016-05-20 21:56

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

edytowany 2x, ostatnio: gswidwa, 2016-05-20 21:57
nie musi zwiększać w ty, zadaniu jest, że ma wtedy za 3 ostatnie widoczne znaki wstawić trzy kropki. Więc jeśli przeczyta i zrozumie Twój opis bez wnikania w tablice dynamiczne, to da radę :) - kaczus 2016-05-20 22:03

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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