• 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

VPS Starter Arubacloud
0 głosów
311 wizyt
pytanie zadane 14 listopada 2015 w C i C++ przez Piotr Zborowski Obywatel (1,680 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,680 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,680 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,680 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ź 177 wizyt
pytanie zadane 16 stycznia 2016 w HTML i CSS przez toster234 Początkujący (370 p.)
0 głosów
0 odpowiedzi 233 wizyt
0 głosów
1 odpowiedź 600 wizyt
pytanie zadane 8 kwietnia 2017 w HTML i CSS przez Skorpion Początkujący (360 p.)

93,018 zapytań

141,988 odpowiedzi

321,281 komentarzy

62,364 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 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...