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

Typ zmiennych c++

VPS Starter Arubacloud
0 głosów
279 wizyt
pytanie zadane 15 lutego 2018 w C i C++ przez Cylian Początkujący (280 p.)
Potrzebuję do mojego programu typu zmiennych przechowujący znaki (dokładnie znak '/') i liczby. Zna ktoś taki typ? (char i string odpadają)
komentarz 15 lutego 2018 przez draghan VIP (106,230 p.)
Co ten typ danych ma semantycznie reprezentować?
komentarz 16 lutego 2018 przez Cylian Początkujący (280 p.)
Dynamicznie zaalokowaną tablicę (dlatego string odpada), w której przechowywać będę liczby i znak '/'.
komentarz 16 lutego 2018 przez draghan VIP (106,230 p.)

Dynamicznie zaalokowaną tablicę (dlatego string odpada)

Dlaczego ma to być dynamicznie alokowana tablica i dlaczego string - który zawiera bufor alokowany dynamicznie - w takim razie odpada?

Prosiłem o wyjaśnienie semantyki tego typu danych, czyli czym ma to być z punktu widzenia nie-programistycznego. Kiedy wiesz, co chcesz osiągnąć, możesz zacząć myśleć o środkach, żeby to zrobić. :)

komentarz 17 lutego 2018 przez Cylian Początkujący (280 p.)

To ja będę bardziej rzeczowy. To jest program, który na pisałem. Konwertuje on tekst. Liczby na litery, np. a=1, b=2, c=3...z=23. Bez polskich ani angielskich znaków (nie chcę używać tablicy ASCII).Pomiędzy liczbami program powinien stawiać '/', aby się one nie mieszały, ale zamiast tego program stawia liczbę 47(zgodnie z tablicą ASCII) Proszę o pomoc.

#include <iostream>
#include <conio.h>
#include <string.h>

using namespace std;

int main()

{
    cout<<"Podaj tekst do zaszyfrowania:"<<endl;
    string litery;
    cin>>litery;
    int x = litery.length();
    unsigned char *tab;
    tab = new unsigned char [2*x];
    int i = 0;
    while(litery [i] != '\0')
    {
        switch(litery [i])
        {
        case 'a':
            tab [i] = 1 +'0';
            break;

        case 'b':
            tab [i] = 2 +'0';
            break;

        case 'c':
            tab [i] = 3 +'0';
            break;

        case 'd':
            tab [i] = 4 +'0';
            break;

        case 'e':
            tab [i] = 5 +'0';
            break;

        case 'f':
            tab [i] = 6;
            break;

        case 'g':
            tab [i] = 7;
            break;

        case 'h':
            tab [i] = 8;
            break;

        case 'i':
            tab [i] = 9;
            break;

        case 'j':
            tab [i] = 10;
            break;

        case 'k':
            tab [i] = 11;
            break;

        case 'l':
            tab [i] = 12;
            break;

        case 'm':
            tab [i] = 13;
            break;

        case 'n':
            tab [i] = 14;
            break;

        case 'o':
            tab [i] = 15;
            break;

        case 'p':
            tab [i] = 16;
            break;

        case 'r':
            tab [i] = 17;
            break;

        case 's':
            tab [i] = 18;
            break;

        case 't':
            tab [i] = 19;
            break;

        case 'u':
            tab [i] = 20;
            break;

        case 'w':
            tab [i] = 21;
            break;

        case 'y':
            tab [i] = 22;
            break;

        case 'z':
            tab [i] = 23;
            break;

        default:
            break;
        }
        i++;
        tab [i] = '/';
        i++;
    }
    i = 0;
    while(tab [i] != '\0')
    {
        cout<< tab [i];
        i++;
    }
    delete [] tab;

    return 0;

}

 

2 odpowiedzi

0 głosów
odpowiedź 15 lutego 2018 przez Bondrusiek Maniak (61,370 p.)

Witam

może spróbuj typ int. Typ int spokojnie obsłuży liczby a znak '/' możesz znaleźć w tablicy

https://pl.wikipedia.org/wiki/ASCII

i sobie tą wartość zarezerwować. Np

int t = 47;
//   '/' to 0010 1111 	47 	2F 	=> za ASCII
//umownie t pokazuje na znak '/'

 

 

0 głosów
odpowiedź 15 lutego 2018 przez mokrowski Mędrzec (155,460 p.)
Ważny jest sens takiego zestawienia.

Jeśli koniecznie chcesz zrobić to "na skróty", to wystarczy typ int i konwersja (rzutowanie) w momencie użycia na typ char.

Jeśli chcesz mieć informację jaki typ danych przechowujesz i przechować w danym momencie jeden z nich z tą informacją, potrzebna będzie unia tych typów ze znacznikiem jaki typ danych jest wewnątrz (tzw. unia parametryczna).

Jeśli ma to być bardziej obiektowo i ze ścisłą kontrolą, to std::variant będzie odpowiedni.

Pytanie bez kontekstu pozwala zaproponować te ogólne rozwiązania.
komentarz 15 lutego 2018 przez niezalogowany

mokrowski czy można tutaj użyć std::any?

komentarz 15 lutego 2018 przez mokrowski Mędrzec (155,460 p.)
Można, ale rozluźniasz kontrolę typów danych bo oprócz wymaganych int i char, możesz przechować także inne typy.

Podobne pytania

0 głosów
2 odpowiedzi 179 wizyt
pytanie zadane 14 listopada 2015 w C i C++ przez Piotr Zborowski Obywatel (1,670 p.)
+1 głos
1 odpowiedź 96 wizyt
0 głosów
1 odpowiedź 534 wizyt

92,455 zapytań

141,263 odpowiedzi

319,099 komentarzy

61,854 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...