• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Dwuwymiarowa dynamiczna tablica typu string

Aruba Cloud - Virtual Private Server VPS
+1 głos
5,196 wizyt
pytanie zadane 14 września 2015 w C i C++ przez Wojtek Wiedeński Bywalec (2,460 p.)

W pokrewnych wątkach nie znalazłem odpowiedzi. W poniższym kodzie na stałe deklaruje rozmiar dwuwymairowej tablicy. Jak dynamicznie przydzielać jej wcześniej ilość kolumn i wierszy?

string tab[2][3] = {{"Ala", "ma", "kota"}, {"Kot", "ma", "problemy"}};
							
	for(int i=0; i<2; i++)
	{
		for(int j=0; j<3; j++)
		{
			cout << tab[i][j] << " ";
		}
		cout << endl;
	}

 

4 odpowiedzi

+1 głos
odpowiedź 14 września 2015 przez Ehlert Ekspert (214,940 p.)
wybrane 14 września 2015 przez Wojtek Wiedeński
 
Najlepsza

TO SAMO dla typu String

+1 głos
odpowiedź 14 września 2015 przez event15 Szeryf (93,790 p.)
int a = 2, b = 3;
cout << "Podawaj wielkości tablic:" << endl;
cin>>a>>b;

int tab[a][b];

W skrócie :)
W przypadku stringu będzie podobnie.
Jeżeli chcesz zrobić to bardziej dynamicznie to pewnie wskaźniki jakieś. Ale to raczej ktoś, kto ma większe doświadczenie z C++ podpowie.

komentarz 14 września 2015 przez Szykem2 Nałogowiec (29,510 p.)
Każdy porządny kompilator powinien zaprotestować i wywalić błąd, że tworzysz tablice nie mając stałych wartości. Jak już podawać wymiary tablicy to lepiej tworzyć operatoren new.
komentarz 14 września 2015 przez Ehlert Ekspert (214,940 p.)
Tak jak kolega wyżej napisał statycznej tablicy tak nie stworzysz.
komentarz 14 września 2015 przez event15 Szeryf (93,790 p.)

Więc chylę głowę! smiley

komentarz 14 września 2015 przez Ehlert Ekspert (214,940 p.)

Spoko luz, wybaczone laugh

+1 głos
odpowiedź 14 września 2015 przez DiZZie Gaduła (3,170 p.)

Musisz zadeklarować wskaźnik do wskaźnika, np

string **tab;
tab = new string*[2];
for(int i = 0; i < 2; i++)
{
tab[i] = new string[3];
}

Nie wiem czy w tym kodzie nie ma błędów, bo nie mam zbytnio czasu i pisałem na szybko ;)

komentarz 14 września 2015 przez Wojtek Wiedeński Bywalec (2,460 p.)
Dzięki za chęci! Znalazłem satysfakccjonującą mnie odpowiedź :-)
0 głosów
odpowiedź 14 września 2015 przez Wojtek Wiedeński Bywalec (2,460 p.)

Dzięki za pomoc, Ehlert podesłał mi praktycznie gotowca, ale poniżej wstawiam kod zmodyfikowany na moje potrzeby dla potomnych :-)

#include <iostream>

using namespace std;

int main(){
	
	 int w,k;
	 cout<<"Liczba wierszy: ";
	 cin>>w;
	 cout<<"Liczba kolumn: ";
	 cin>>k; 
	
	cout<<"\n\nTABLICA 2D - C++\n";
	string **tab2 = new string *[w]; //alokacja pamieci
	for ( int i = 0; i < w; ++i )
	 {
	 	tab2[i] = new string [k]; //alokacja pamieci
	 	for ( int j = 0; j < k; ++j) //wpisanie wartosci do tablicy
	 	{
	 		cout << "Podaj zawartosc ["<<i+1<<"]["<<j+1<<"]: ";
		 	cin >> tab2[i][j];
		}
	 }
	//wypisz tab2[w][k]
	for ( int i = 0; i < w; ++i, cout<<endl )
	 	for ( int j = 0; j < k; ++j)
	 		cout<<tab2[i][j]<<'\t';
	
        //zniszcz tab2
	for ( int i(0); i < w; ++i )
	 	delete [] tab2[i]; //uwolnienie pamieci
		delete [] tab2; //uwolnienie pamieci
	 	tab2 = NULL; 

	return 0;
}

 

Podobne pytania

–1 głos
1 odpowiedź 650 wizyt
pytanie zadane 21 września 2018 w C i C++ przez Kacperos_89 Początkujący (400 p.)
0 głosów
2 odpowiedzi 1,686 wizyt
0 głosów
2 odpowiedzi 634 wizyt
pytanie zadane 6 kwietnia 2016 w C i C++ przez mateusz12 Użytkownik (530 p.)

93,331 zapytań

142,323 odpowiedzi

322,400 komentarzy

62,667 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...