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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 33, средняя оценка - 4.73
kib
0 / 0 / 0
Регистрация: 25.09.2010
Сообщений: 22
#1

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

10.10.2010, 00:23. Просмотров 4072. Ответов 2
Метки нет (Все метки)

Добрый вечер! У меня возник вопрос. Программа разделяет символьную строку (любую) на группы символов, коды которых заканчиваются одной цифрой в системе счисления по основанию 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<<" ";}, как раз для вывода пробелов, но тоже не вышло.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.10.2010, 00:23
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Вывод кода символа в шестнадцатиричной системе счисления (C++):

Вывод символа в 10 и 16 системе счисления - C++
Помогите с алгоритмом. При нажатии на заданные студентом клавиши на экран выводится код этого символа в десятичной или шестнадцатеричной...

Определить, является ли заданный текст записью числа в шестнадцатиричной системе счисления - C++
Задан текст, в который входят только цифры и буквы. Определить, является ли этот текст записью числа в шестнадцатиричной системе счисления....

Оформить вывод числа в двоичной системе счисления - C++
Уважаемые программисты! Помогите правильно оформить вывод числа в двоичной системе счисления, необходимо сделать это именно с помощью...

Перевести числа из шестнадцатиричной системы счисления в двоичную - C++
Как в С++ перевести из 16 системы в 2-ю,спасибо

Перевод целых чисел из шестнадцатиричной системы счисления в двоичную - C++
Написать программу перевода целых чисел из шестнадцатиричной системы счисления в двоичную.

Вывод кода символа - C++
Почему при таком выводе кода символа в консоли выводится -33? Как я понимаю, используется кодировка MS Windows. Работаю в VS 2013. cout...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
fasked
Эксперт С++
4936 / 2516 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
10.10.2010, 07:33 #2
Не очень понятно, что Вам требуется сделать,
но может быть натолкнет Вас на мысли.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
#include <string>
 
int main()
{
    unsigned char symbol = 'j';
    unsigned int codes[2] = { 0 };
    
    codes[0] = symbol & 0xF;
    codes[1] = symbol >> 4;
    
    std::cout << std::hex << symbol  << ": " << 
                             codes[0] << " " << 
                             codes[1] << std::endl;
}
В итоге в массиве codes лежит код символа, разделенный на две части.
0
kib
0 / 0 / 0
Регистрация: 25.09.2010
Сообщений: 22
10.10.2010, 10:06  [ТС] #3
По идее, мне нужно отлалить вот эту часть программы
C++
1
2
3
4
5
6
7
8
9
  pt=first;
  while(pt!=NULL)
   {
    len=0;
    cout<<(pt->data[0][0])%16;
    while(pt->data[len]) {len++; cout<<" ";}
    pt=pt->next;
   }
  cout<<endl;
Строка cout<<(pt->data[0][0])%16; высчитывает последнюю цифру кода символов группы, то есть здесь уже не выдает ошибок, а вот в другой строке while(pt->data[len]) {len++; cout<<" ";} мне надо добиться, чтобы каждый этот символ был под начальным символом группы, то есть отстался вывод. Но компилятор выдает в этом месте ошибку. Пробовала вводить так for(int i=0;strlen((pt->data[len]))>i;i++){cout<<" ";}, здесь компилятор ругается на strlen и пишет:
no matching function for call to `strlen(std::basic_string<char, std::char_traits<char>, std::allocator<char> >&)'
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.10.2010, 10:06
Привет! Вот еще темы с ответами:

Строки: вывод кода введенного пользователем символа - C++
Написать программу, которая выводит код введенного пользователем символа. Программа должна завершать работу в результате ввода, например,...

Вывод символа слева и его соответствующего кода ASCII справа - C++
Собственно вопрос как это сделать?

Проверить корректность числа в заданной системе счисления и перевести в другую систему счисления - C++
На вычислительной практике дали такое задание: С клавиатуры вводятся 2 положительных целых числа: число A (в системе счисления с...

Вывод чисел 1-256 в двоичной, восьмеричной и шестнадцатиричной системах - C++
Программа моя работает, но не совсем правильно. Она переводит числа из десятичной системы в другие путем деления и вычисления остатка. ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru