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

Jak zmienić szufladkę tablicy na inny typ zmiennych

Object Storage Arubacloud
0 głosów
184 wizyt
pytanie zadane 14 listopada 2015 w C i C++ przez Piotr Zborowski Obywatel (1,670 p.)
Witam. Otóż chciałbym zrobić coś takiego:

Mam sobie tablice, dajmy na to:

long double test[10];

i chcę, aby np

test[8]

nie była zmienną typu long double, lecz np. string, ale aby nadal była częścią tej tablicy.

Używam Dev-C++

Z góry dzięki.

2 odpowiedzi

0 głosów
odpowiedź 14 listopada 2015 przez Piotr Zborowski Obywatel (1,670 p.)
edycja 14 listopada 2015 przez Piotr Zborowski

Okej, już sobie poradziłem.

Zrobiłem to tak:

#include <string>
#include <iostream>

using namespace std;

int main()
{
int test[5];
test[0] = 1;
test[1] = 2;
test[2] = 3;
test[3] = 4;
test[4] = 5;
 // jeśli chcę np przekonwertować test[2] na string, to robię to po prostu tak:
string to_string(int test[2] )
}

i po sprawie, od teraz test[2] jest pełnoprawnym stringiem, a reszta to dalej int'y

 

 

Ale potrzebuję teraz pomocy w innej sprawie:

 

Mam taki kod:

string g;
    cin>>g;
    #define DZIALANIE g

jeśli zamiast string g daje int g to wszytko działa, więc chciałbym wiedzieć, co tutaj jest źle

komentarz 14 listopada 2015 przez Patryk Krajewski Nałogowiec (26,170 p.)
Jak chcesz pomocy w innej sprawie to załóż nowy temat.
komentarz 14 listopada 2015 przez draghan VIP (106,230 p.)

(...) i po sprawie, od teraz test[2] jest pełnoprawnym stringiem, a reszta to dalej int'y

Mała poprawka. Zmienna test[2] to nadal jest element talicy wartości typu int, a więc nadal jest intem. Jedynie w momencie wywołania to_string() dostajesz obiekt typu std::string, który możesz z czymś porównać lub dokonać jego przypisania.

Nie możesz zmienić typu już zadeklarowanej zmiennej (chyba że pobawisz się uniami), oprócz metod rzutowań czy konwersji - które de facto nie zmieniają typu danej zmiennej, tylko zwracają nowy obiekt (o nowym typie), powstały na podstawie innego.

Jeśli masz kolejny problem, nie umieszczaj go w temacie razem z innym, już rozwiązanym. I postaraj się szczegółowo go opisać - tutaj nie napisałeś na przykład, jaki masz dokładnie problem. Wiadomo tylko, że "jeśli zamiast string g daje int g to wszytko działa" - a kiedy nie działa? I co oznacza dla Ciebie, że nie działa?

Pozdrawiam. :)

komentarz 14 listopada 2015 przez Piotr Zborowski Obywatel (1,670 p.)
No właśnie nie - po użyciu to_string() na tej zmiennej, mogę sobie już tego używać całkowicie jak stringa.

Jeśli chodzi o mój drugi problem - ogólnie, nie chce się skompilować, zaznacza w #define DZIALANIE g zmienną G, zaś jeśli dam zwyczajnie int'a, kompiluje się normalnie, acz bardzo zależy mi na tym, aby był to string.
komentarz 14 listopada 2015 przez draghan VIP (106,230 p.)

No właśnie nie - po użyciu to_string() na tej zmiennej, mogę sobie już tego używać całkowicie jak stringa.

Nie możesz. ;)

Spróbuj - po użyciu to_string(test[2]) - wywołać:
 

test[2] += "abc";

Z obiektem std::string mógłbyś tak postąpić.

Nadal nie rozumiem Twojego drugiego problemu. Podaj komunikat błędu i sposób wywołania tej makrodefinicji. Najlepiej w osobnym temacie, jeśli jeszcze go nie założyłeś.

–1 głos
odpowiedź 14 listopada 2015 przez Dorion300 Szeryf (90,250 p.)
Nie da się.
I dobrze że się nie da.
Po wtedy byś miał syf w kodzie i o wiele trudnej wtedy coś z tego zrozumieć.

W czym masz problem?

Może da się inaczej rozwiązać twój problem?
komentarz 14 listopada 2015 przez Piotr Zborowski Obywatel (1,670 p.)

Da się :) Tak jak napisałem w moim poście, ostatecznie zrobiłem to tak: 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

#include <string>

#include <iostream>

 

using namespace std;

 

int main()

{

int test[5];

test[0] = 1;

test[1] = 2;

test[2] = 3;

test[3] = 4;

test[4] = 5;

 // jeśli chcę np przekonwertować test[2] na string, to robię to po prostu tak:

string to_string(int test[2] )

}

i po sprawie, od teraz test[2] jest pełnoprawnym stringiem, a reszta to dalej int'y

komentarz 14 listopada 2015 przez Dorion300 Szeryf (90,250 p.)
podejrzewam że mogą wystąpic konflikty jeśli np. obiekt string jest większy od int lub double.

Ale chwilowo tak nie jest.

Polecam uważać na to.
komentarz 14 listopada 2015 przez Dorion300 Szeryf (90,250 p.)

Przy okazji, spróbuj wykonać metodę Clear na tym stringu.

W prosty sposób nie da się po prostu:

#include <string>
#include <iostream>

using namespace std;

int main()
{
    int test[5];
    test[0] = 1;
    test[1] = 2;
    test[2] = 3;
    test[3] = 4;
    test[4] = 5;
    string to_string(int test[2] );
    string s;
    s.clear();
    ((string)test[2]).clear();  //error: invalid conversion from 'int' to 'const char*'
    test[2].clear(); //request for member 'clear' in 'test[2]', which is of non-class type 'int'|
}

Kompilator myśli że to dalej int, nawet jak wymusimy konwersję.

Wiesz dlaczego?

Po nie można zmienić typu na określonej zmiennie.

To_string nie przerobił int na string, jest to po prostu zmienna która zwraca przerobiony int na string a sam parametr zostawia taki jaki jest.

Podobne pytania

0 głosów
1 odpowiedź 146 wizyt
pytanie zadane 16 stycznia 2016 w HTML i CSS przez toster234 Początkujący (370 p.)
0 głosów
0 odpowiedzi 219 wizyt
0 głosów
1 odpowiedź 520 wizyt
pytanie zadane 8 kwietnia 2017 w HTML i CSS przez Skorpion Początkujący (360 p.)

92,579 zapytań

141,432 odpowiedzi

319,664 komentarzy

61,964 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...