Zamiana int na ASCII

Odpowiedz Nowy wątek
2011-08-23 22:05
0

Cześć,

Właśnie rozwiązuje zadanie z Symfonii Grębosza, którego treść brzmi następująco:

Napisz funkcję, która zarezerwuje 10 elementową tablicę, a jej adres przekaże wskaźnikowi o nazwie linijka Ma to być tablica, w której można przechowywać wskaźniki do tablic znaków.

Następnie za pomocą pętli for dla każdego z 10 elementów tej tablicy linijka:

  1. Zarezerwuj operatorem new tablicę 80 znaków,
  2. Jej adres wpisz do kolejnego elementu tablicy linijka
  3. W tej 80 znakowej tablicy znaków umieść C-string "to jest linijka nr" - gdzie n jest kolejnym numerem linijki (0-9)
  4. Po zrobieniu tego wszystkiego, wypisz kolejno zawartości tych C-stringów
  5. W tablicy wskaźników linijka dokonaj takiej zmiany, by zamienić zawartość elementu trzeciego z szóstym
  6. Za pomocą takiej samej jak poprzednio pętli for, wypisz na ekranie 10 C-stringów
  7. Zlikwiduj wszystkie rezerwowane operatorem new obiekty.

Poniżej umieszczam swój kod:

#include <stdlib.h>
#include <stdio.h>
#include <iostream>
using namespace std;
char ** tworzaca();
char * druk(char *wsk, const char lol[], int ktora);
const char tojest[19] = {"to jest linijka nr"};
char buffer[12];
int main()
{
    char * *linijka;
    linijka = tworzaca();
    for(int i = 0; i < 10; i++)
    {
        linijka[i] = new char[80];
        cout << druk(linijka[i], tojest, i) << endl;
 
    }
    for(int i = 0; i < 10; i++)
    {
        delete [] linijka[i];
    }
        delete [] linijka;
    return 0;
 
}
char ** tworzaca()
{
    char **w = new char*[10];
    return w;
}
char * druk(char *wsk, const char lol[], int ktora)
{
    int i;
    char *pocz = wsk;
    for(i = 0; i < 18; i++) // nie mialem pomyslu jak inaczej to wpisywanie "to jest..." zautomatyzowac
    {
        *(wsk++) = lol[i];
    }
    *(wsk++) = ' ';
    *(wsk++) = itoa(ktora, buffer, 10); //tu trzeba zastosowac cos ala itoa, ale nie dziala
    *wsk = 0;
    return pocz;
} 

To po kolei. Nie rozumiem celowości 2 podpunktu tego zadania, skoro i tak za chwile do tej tablicy mam wpisać ten ciąg znaków "To jest linijka nr n".

Problemem głównie jest dla mnie jednak ta itoa, nie działa i nie wiem jak zamienić liczbę na jej odpowiednik w ascii, żebym mógł go do c-stringu dołączyć. Jest jakaś inna możliwość zrobienia tego samego? Bo wygląda na to, że ta funkcja biblioteczna nie jest wspierana przez C++, tylko przez niektóre kompilatory... w taki sposób jak to jest tutaj napisane chciałem to zrobić: http://www.cplusplus.com/reference/clibrary/cstdlib/itoa/

Byłbym również wdzięczny za wszelkie konstruktywne uwagi odnośnie tego, co napisałem :) Jeżeli moglibyście mi powiedzieć co mógłbym rozwiązać w jakiś lepszy sposób, to byłoby super :)

Z góry dziękuję za pomoc.
Pozdrawiam

Pozostało 580 znaków

2011-08-23 22:19
sig

Google prawdę ci powie, już pod pierwszym linkiem czyli Konwersje int na string i string na int masz kilka możliwości.

No to jeden problem już mam z głowy :) Dziękuję serdecznie :) - transient 2011-08-23 22:26

Pozostało 580 znaków

2011-08-23 22:22
1

Co znaczy nie działa? Jak na razie próbujesz przypisać wskaźnik do char do zmiennej typu char?

itoa(ktora, wsk, 10);

Czy można troszkę jaśniej? Tzn. gdzie dokładnie dokonuje takiego przypisania? - transient 2011-08-23 22:29
*(wsk++) = itoa(ktora, buffer, 10); //tu trzeba zastosowac cos ala itoa, ale nie dziala - byku_guzio 2011-08-23 22:31
Dobra, widzę :P Dzięki. Ale i tak z itoa skorzystać nie mogę, bo mój kompilator tego nie wspiera :P - transient 2011-08-23 22:34

Pozostało 580 znaków

2011-08-23 22:35
0

Problem już prawie rozwiązany (korzystanie z google w sposób prawidłowy nie boli ^^) ale ciągle, gdyby tylko ktoś miał jakieś sugestie odnośnie tego, co w tym kodzie mogę zmienić, byłbym wdzięczny :)

Pozostało 580 znaków

2011-08-23 22:52
1

Można go znacznie skrócić:

const int n = 10;
const int m = 80;
 
char** tworzaca()
{
    return new char*[n];
}
 
for (int i = 0; i < n; i++) {
    linijka[i] = new char[m];
    sprintf(linijka[i], "to jest linijka nr %d", i);
}

Reszta to już tylko wypisywanie, swapowanie i usuwanie.

edytowany 4x, ostatnio: iooi, 2011-08-23 23:01

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