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

question-closed Unsigned char do stringa

Object Storage Arubacloud
0 głosów
230 wizyt
pytanie zadane 6 września 2016 w C i C++ przez rubiikk Obywatel (1,900 p.)
zamknięte 7 września 2016 przez rubiikk

Cześć, mam do Was szybkie pytanie.

Mógłby mi ktoś wytłumaczyć, jak przekonwertować zmienną:

 unsigned char age;

do stringa? Mowa dokładnie o tym wycinku kodu:

case 2:
            age = line;

            break;

line jest zmienną string.

komentarz zamknięcia: Problem rozwiązany.

3 odpowiedzi

+1 głos
odpowiedź 6 września 2016 przez Szykem2 Nałogowiec (29,510 p.)

Bardzo prosty sposób. Stwórz nowego stringa i dodaj do niego ten znak.

unsigned char a = 'a';
std::string b;
b.push_back(a);

EDIT: Chyba, że chodzi o liczbę, aczkolwiek nie wydaje mi się. Ale jeśli tak to użyj funkcji std::to_string(). Tylko tutaj nie zapomnij o tym, że ta funkcja istniej dopiero od standardu c++11.

+1 głos
odpowiedź 6 września 2016 przez Michał Muzyka Pasjonat (24,080 p.)
            age = line;

jak chcesz dostawić stringa (wiele znaków), do zmiennej przechowującej 1 znak?

chyba że chcesz wstawić ten 1 znak do stringa ale to tak:
 

        line = age;

lecz wydaje mi się że używając zmiennej unsigned char nie chodzi ci o znak, tylko o zmienną o max wielkości 255, jeśli chcesz wstawić to do stringa jako liczbę to:
 

line = std::to_string(age); //c++ 11

//lub

#include <sstream>

ostringstream ss;
ss << age;
string line = ss.str();

 

0 głosów
odpowiedź 7 września 2016 przez rubiikk Obywatel (1,900 p.)

Hmm... według kodu, który mam, to unsigned char powinien przechowywać wiek i wybrałem tą zmienną ze względu na maksymalną wielkość, ale teraz muszę przekonwertować unigned char na stringa i nie potrafię sobie po prostu z tym poradzić. Jak na moje początki, to przerasta mnie to jeszcze. Wolę na razie uniknąć nowego standardu, bo występuje mi jakiś błąd - prawdopodobnie mój code blocks nie obsługuje standard c++ 11. Poniżej kod i komentarz w którym miejscu dokładnie musi nastąpić konwersja:

    std::string line; //przechowuje pobrana linie tekstu:
    int number_line=0;
    while(getline(file, line))
    {
        switch(number_line % 4)
        {
        case 0:
            name = line;
            break;
        case 1:
            surname = line;
            break;
        case 2:
            //Tutaj konwersja

            break;
        case 3:
            phone_number = atoi(line.c_str());

            names.push_back(name);
            surnames.push_back(surname);
            ages.push_back(age);
            phone_numbers.push_back(phone_number);
            break;
        }
        number_line++;
    }


 

1
komentarz 7 września 2016 przez niezalogowany
edycja 7 września 2016

Możesz przekonwertować typ string na int, a ten przerzucić do unsigned char. Pamiętając tylko, że podczas odczytu i tak trzeba będzie zamienić unsigned char na int. 

 

#include <iostream>
#include <fstream>
#include <vector>
#include <cstdlib>

using namespace std;

int main()
{
    fstream file;
    file.open("text.txt", ios::in);
    string line; //przechowuje pobrana linie tekstu:
    int number_line=0;

    unsigned char age;
    int phone_number = 0;
    string  name, surname;
    
    vector <unsigned char> ages;
    vector <string> names, surnames;
    vector <int> phone_numbers;

    int test=0;

    while(getline(file, line))
    {
        switch(number_line % 4)
        {
        case 0:
            name = line;
            break;
        case 1:
            surname = line;
            break;
        case 2:
            age = atoi(line.c_str());
            cout<<age<<" ---> "<<int(age)<<endl;
            break;
        case 3:
            phone_number = atoi(line.c_str());

            names.push_back(name);
            surnames.push_back(surname);
            ages.push_back(age);
            phone_numbers.push_back(phone_number);
            break;

        }
        number_line++;
    }

    file.close();
    return false;
}

 

komentarz 7 września 2016 przez rubiikk Obywatel (1,900 p.)

Dziękuję bardzo. Właśnie miałem problem, żeby jakoś to dobrze przekonwertować, a to jednak mogłem też zrobić za pomocą:

age = atoi(line.c_str());

a w wektorze zapisać:

std::vector<int> ages;

 

komentarz 7 września 2016 przez niezalogowany
Tak jak napisałeś jest zdecydowanie prościej :)
komentarz 7 września 2016 przez rubiikk Obywatel (1,900 p.)
Tak, dokładnie. Dzięki za pomoc ;)

Podobne pytania

0 głosów
2 odpowiedzi 885 wizyt
pytanie zadane 11 września 2016 w C i C++ przez rubiikk Obywatel (1,900 p.)
0 głosów
1 odpowiedź 110 wizyt
pytanie zadane 22 kwietnia 2021 w C i C++ przez Whiskey_Taster Pasjonat (15,610 p.)
–1 głos
1 odpowiedź 221 wizyt
pytanie zadane 6 grudnia 2017 w C i C++ przez kacper1445 Gaduła (4,880 p.)

92,633 zapytań

141,503 odpowiedzi

319,883 komentarzy

62,015 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!

...