Форум программистов, компьютерный форум CyberForum.ru

Вывод кода символа в шестнадцатиричной системе счисления - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Чередование знаков http://www.cyberforum.ru/cpp-beginners/thread174298.html
Подскажите, как организовать чередование знаков --++--++... +-+-+ знаю что -1^(n-1), а по два знака?
C++ Преобразовать дату Гении С++, вы моя последняя надежда... Задали мне задачу по программированию. Она простая, буквально делается за 10 мин, но с С++ я не дружу, поэтому сюда и пишу... Вообще ничего не получается. Если есть время, помогите решить: Преобразовать дату Даны целые числа day, month, year. Проверьте возможность существования этой даты и в случае положительного результата выведите её в следующем... http://www.cyberforum.ru/cpp-beginners/thread174284.html
Шифрование непрерывным способом на нелинейной обратной связи C++
Доброго времени суток, форумчане! Объясните пожалуйста(желательно на конкретном примере) как осуществить непрерывное шифрование на нелинейной обратной связи?
C++ Обьявление переменных в циклах и до
Возник вопрос почему? Без обьявления int x = 1; до цикла возникает ошибка при компиляции программы ... Хотя в книжке обьявление типа и начального значения делаеться в цикле >= for (здесь) НА скрине всё показано
C++ Простейший калькулятор http://www.cyberforum.ru/cpp-beginners/thread174275.html
Калькулятор считает сумму, разность, произведение и частное двух чисел a и b Код: #include <stdio.h> #include <conio.h> int main() { float a,b; char ch;
C++ Подсчет времени выполнения сортировки Подскажите, пожалуйста, как написать в программе, чтобы подсчитывало время выполнения сортировки? Там как-то надо ввести "clock time" с нетерпением жду ответа)) подробнее

Показать сообщение отдельно
kib
0 / 0 / 0
Регистрация: 25.09.2010
Сообщений: 22
10.10.2010, 00:23     Вывод кода символа в шестнадцатиричной системе счисления
Добрый вечер! У меня возник вопрос. Программа разделяет символьную строку (любую) на группы символов, коды которых заканчиваются одной цифрой в системе счисления по основанию 16. Результат отображается на потоке стандартного вывода. Необходимо под начальным символом каждой группы указать крайнюю правую цифру его кода. Например строка jjzez разделится на две группы jjzz и e, под первой группой должна быть буква A (в шестнадцатиричной системе у j - 6A, у z - 7A), а под второй группой цифра 5. Как это реализовать?
(на закомментированню часть /*...*/ компилятор выдает ошибки, где как раз делаю попытки вывода крайней правой цифры кода:
102 C:\Users\Liza\Documents\Áàóìàíêà\ma x.cpp no match for 'operator%' in '*pt->Llist::data % 10'
и
103 C:\Users\Liza\Documents\Áàóìàíêà\ma x.cpp could not convert `*(pt->Llist::data + (+(((unsigned int)len) * 4u)))' to `bool')
Код программы:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
#include <iostream>
#include <cstdlib>
#include <cstring>
#include <cstdio>
using namespace std;
 
class Llist
 {
public:
  string *data;
  Llist *next;
  Llist(){next=NULL;data=new string;}
  ~Llist() {cout<<"cleaning up Llist"<<endl; delete data;}
 };
 
 class group
 {
private:
  Llist *first, *last;
public:
  void add(string);
  void dlt(Llist*);
  void print();
  group(string);
  ~group();
 };
group::group(string str)
 {
   string s[16];
   first=NULL;
   last=NULL;
   int i, len=0;
   while(str[len]) len++;
   for (i=0; i<=len;i++) s[str[i]%16]+=str[i];
   for (i=0; i<16; i++) if (s[i][0]) add(s[i]);
   //print();
 }
group::~group()
 {
  cout<<"CLEANING UP..."<<endl;
  Llist *pt, *pt1;
  while(first!=last)
   {
    pt=first;
    while(pt->next!=last) {pt=pt->next;}
    delete last;
    last=pt;
   }
   if(first!=NULL) delete first;
 }
void group::add(string a)
 {
  if(first==NULL)
     {
      first=new Llist;
      last=first;
     }
  else
     {
      last->next=new Llist;
      last=last->next;
     }
  *(last->data)=a;
 }
 
void group::dlt(Llist *xpt)
 {
  if ((xpt!=NULL) and (xpt<=last) and (xpt>=first))
   {
    if (xpt==first)
     {
       first=first->next;
       delete xpt;
     }
    else
     {
       Llist *pt;
       pt=first;
       while(pt->next!=xpt) pt=pt->next;
       pt->next=xpt->next;
       if (xpt==last) last=pt;
       delete xpt;
     }
   }
 }
 
void group::print()
 {
  Llist *pt;
  int len=0;
  pt=first;
  while(pt!=NULL)
   {
    cout<<*(pt->data)<<" ";
    pt=pt->next;
   }
  cout<<endl;
  /*pt=first;
  while(pt!=NULL)
   {
    len=0;
    cout<<(pt->data[0])%16;
    while(pt->data[len]) {len++; cout<<" ";}
    pt=pt->next;
   }
  cout<<endl;*/
  }
int main()
 {
  cout<<"Vvedite stroku simvolov"<<endl;       
  char c;
  string str;
  while((c=getchar())!='\n') str+=c;
  group A(str);
  A.print();
 }
Добавлено через 3 часа 58 минут
Вот с ошибкой в одной строке разобралась, data ведь у меня двумерный массив, т.е. в 1 строке (там где есть ошибка) нужно писать cout<<(pt->data[0][0]%16). А во второй ошибочной строке получается надо вывести пробелы просто, но я еще не могу разобраться с этим, а сожалению, может быть кто сталкивался с этим?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
#include <iostream>
#include <cstdlib>
#include <cstring>
#include <cstdio>
using namespace std;
 
class Llist
 {
public:
  string *data;
  Llist *next;
  Llist(){next=NULL;data=new string;}
  ~Llist() {cout<<"cleaning up Llist"<<endl; delete data;}
 };
 
 class group
 {
private:
  Llist *first, *last;
public:
  void add(string);
  void dlt(Llist*);
  void print();
  group(string);
  ~group();
 };
group::group(string str)
 {
   string s[16];
   first=NULL;
   last=NULL;
   int i, len=0;
   while(str[len]) len++;
   for (i=0; i<=len;i++) s[str[i]%16]+=str[i];
   for (i=0; i<16; i++) if (s[i][0]) add(s[i]);
   //print();
 }
group::~group()
 {
  cout<<"CLEANING UP..."<<endl;
  Llist *pt, *pt1;
  while(first!=last)
   {
    pt=first;
    while(pt->next!=last) {pt=pt->next;}
    delete last;
    last=pt;
   }
   if(first!=NULL) delete first;
 }
void group::add(string a)
 {
  if(first==NULL)
     {
      first=new Llist;
      last=first;
     }
  else
     {
      last->next=new Llist;
      last=last->next;
     }
  *(last->data)=a;
 }
 
void group::dlt(Llist *xpt)
 {
  if ((xpt!=NULL) and (xpt<=last) and (xpt>=first))
   {
    if (xpt==first)
     {
       first=first->next;
       delete xpt;
     }
    else
     {
       Llist *pt;
       pt=first;
       while(pt->next!=xpt) pt=pt->next;
       pt->next=xpt->next;
       if (xpt==last) last=pt;
       delete xpt;
     }
   }
 }
 
void group::print()
 {
  Llist *pt;
  int len=0;
  pt=first;
  while(pt!=NULL)
   {
    cout<<*(pt->data)<<" ";
    pt=pt->next;
   }
  cout<<endl;
  /*pt=first;
  while(pt!=NULL)
   {
    len=0;
    cout<<(pt->data[0][0])%16;
    while(pt->data[len]) {len++; cout<<" ";}
    pt=pt->next;
   }
  cout<<endl;*/
  }
int main()
 {
  cout<<"Vvedite stroku simvolov"<<endl;       
  char c;
  string str;
  while((c=getchar())!='\n') str+=c;
  group A(str);
  A.print();
 }
Добавлено через 2 минуты
Пробовала вводить типо такого цикла for(int i=0;strlen((pt->data[k]))>i;i++){cout<<" ";}, как раз для вывода пробелов, но тоже не вышло.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 12:13. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru