Zamiana int na ASCII

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

1

Google prawdę ci powie, już pod pierwszym linkiem czyli http://4programmers.net/C/Konwersje_int_na_string_i_string_na_int masz kilka możliwości.

1

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

itoa(ktora, wsk, 10);
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 :)

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.

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