• 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

0 głosów
547 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 1,545 wizyt
pytanie zadane 11 września 2016 w C i C++ przez rubiikk Obywatel (1,900 p.)
0 głosów
1 odpowiedź 372 wizyt
pytanie zadane 22 kwietnia 2021 w C i C++ przez Whiskey_Taster Pasjonat (15,610 p.)
–1 głos
1 odpowiedź 335 wizyt
pytanie zadane 6 grudnia 2017 w C i C++ przez kacper1445 Mądrala (5,070 p.)

93,741 zapytań

142,677 odpowiedzi

323,296 komentarzy

63,326 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

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...