Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.70/47: Рейтинг темы: голосов - 47, средняя оценка - 4.70
3 / 3 / 0
Регистрация: 24.02.2017
Сообщений: 140

Замена символов в массиве char

04.06.2017, 08:27. Показов 8727. Ответов 7

Студворк — интернет-сервис помощи студентам
Всем привет!
Задача: исходная строка (char) содержит числа десятичной системы счисления. Найти их, создать новую строку, в которой заменить числа десятичной системы счисления на их же номинал в шестнадцатеричной системе счисления.
Использовать стандартные функции и библиотеки нельзя.

Мой код: он хорошо переводит только числа, символы букв не могу перевести.
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
#include <stdio.h>
 
 
 
void inputChar(char *str)
{
    printf("input array char <100: ");
    scanf("%s", str);
}
void revers(char *A)
{
    int j;
    for (j = 0; A[j] != '\0'; j++);
    j--;
    for (int i = 0; i <j; i++, j--)
    {
        char temp = A[i];
        A[i] = A[j];
        A[j] = temp;
    }
}
int charToDecInt(char *A)
{
    int summ = 0;
    for (int i = 0; A[i] != '\0'; i++)
    {        
          
            if ('0' <= A[i] && A[i] <= '9')
            {
                summ *= 10;
                summ += A[i] - '0';
            }
            else
            {
                summ += A[i]-'A'+10;
            }
        
    }
    return summ;
}
void decIntTohexString(int a, char *A)
{
    int j = 0;
    while (a != 0)
    {
        
        int r = a % 16;
        if (r >= 1 && r <= 9)
        {
            r += '0';
        }
        else 
        {
            r += 'A'- 10;
        }
        A[j++] = r+A[j];
        a /= 16;
    }
    A[j] = '\0';
    revers(A);
}
void display()
{
    const int N = 100;
    char A[N] = "";
    char B[N] = "";
    inputChar(A);
    int a = charToDecInt(A);
    decIntTohexString(a, B);
    printf("hexChar = %s\n", B);
 
    
}
int main()
{
    
    display();
    return 0;
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
04.06.2017, 08:27
Ответы с готовыми решениями:

Поиск слова в массиве символов char
Получаю массив символов типа char из com port. есть ли способ поиска в этом массиве необходимого слова кроме как побайтово копировать ...

char массив, get(), ввести больше символов чем в массиве
#include &lt;iostream&gt; using std::cin; using std::cout; using std::endl; int main() { setlocale(LC_ALL,&quot;&quot;); char...

Замена символов в массиве
Продолжая переводить лабы из паскаля в C++ Имеем такой код на паскале: var a:string; p,i:byte; begin writeln('введи текст для...

7
Рэмбо комнатный
 Аватар для GeFacle
103 / 103 / 99
Регистрация: 05.03.2017
Сообщений: 511
04.06.2017, 10:55
Серега_123, через atoi переводи в числовой тип, не?
0
с++
1282 / 523 / 225
Регистрация: 15.07.2015
Сообщений: 2,562
04.06.2017, 11:04
Не понимаю у вас программа на СИ а вы пишете в раздел С++, используйте hex и dec,oct


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>     // std::cout, std::dec, std::hex, std::oct
 
int main () {
  int n = 70;
  std::cout << std::dec << n << '\n';
  std::cout << std::hex << n << '\n';
  std::cout << std::oct << n << '\n';
  return 0;
}
или
 
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
 int a=11;
 cout<<setbase(16)<<a<<endl;
}
0
3 / 3 / 0
Регистрация: 24.02.2017
Сообщений: 140
04.06.2017, 13:41  [ТС]
Antikl, Представьте, что у нас есть строка на входе, которая содержит буквы, пробелы и числа представленные в десятичной системе счисления. Так вот на выходе должна получится точно эта же строка, с точно этими же числами, только представленными в шестнадцатеричной системе счисления. Вместо чисел представленных в dec мы их заменяем на числа в hex. Вот еще один пример (для простоты на русском). На входе строка: Например: "на складе 444 лежит 163 товара", на выходе должно получится: "на складе 0x1BC лежит 0xA3 товара".

Добавлено через 13 минут
GeFacle, Стандартные функции и библиотеки нельзя использовать. Ограничения по ресурсам
0
с++
1282 / 523 / 225
Регистрация: 15.07.2015
Сообщений: 2,562
04.06.2017, 14:20
Цитата Сообщение от Серега_123 Посмотреть сообщение
dec мы их заменяем на числа в hex
так и используй эти функции или что не так?
0
3 / 3 / 0
Регистрация: 24.02.2017
Сообщений: 140
04.06.2017, 14:45  [ТС]
Antikl, да нельзя использовать никакие функции. Все вруную
0
с++
1282 / 523 / 225
Регистрация: 15.07.2015
Сообщений: 2,562
04.06.2017, 16:34
Преобразование десятичного числа в шестнадцатеричное
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
using namespace std;
 
int main(int argc, char* argv[])
{
    setlocale(LC_ALL, "rus");
    int number;
 
    cout << "Введите число: ";
    cout.setf(ios::showbase); // индикатор основания системы
    cin >> number;
    cout << "Шестнадцатеричная форма записи числа " << number << " = "
         << hex/*преобразование десятичного числа в шестнадцатеричное*/ << number << endl;
 
    system("pause");
    return 0;
}
0
3 / 3 / 0
Регистрация: 24.02.2017
Сообщений: 140
10.06.2017, 07:05  [ТС]
Antikl, задача решена. Она на "C", но после небольшой доработки и на "C++" заработает спокойно.
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
#include <stdio.h>
#include <locale.h>
 
int strLen(char *S)
{
    int n;
    for (n = 0; S[n] != '\0'; n++);
    return n;
}
void revers(char *A)
{
    int j;
    for (j = 0; A[j] != '\0'; j++);
    j--;
    for (int i = 0; i <j; i++, j--)
    {
        char temp = A[i];
        A[i] = A[j];
        A[j] = temp;
    }
}
void digitDecToHexString(int digit, char *T)
{
    int j = 0;
    while (digit != 0)
    {
        int r = digit % 16;
        if (r >= 1 && r <= 9)
        {
            r += '0';
        }
        else
        {
            r += 'A' - 10;
        }
        T[j++] = r;
        digit /= 16;
    }
    T[j] = '\0';
    revers(T);
}
void intDecToCharHex(char *A, char *B)
{
    int n = strLen(A);
    char Hex[1000] = "";
    int i = 0;
    int j = 0;
    int k = 0;
    int v = 0;
    int p = 0;
    for(i = 0; i<n; i++)
    {
        if ('0' <= A[i] && A[i] <= '9')
        {
            v = v * 10 + (A[i] - '0');
            k = 1;
        }
        else
        {
            if (k == 1)
            {
                    digitDecToHexString(v, Hex);
                    B[j++] = '0';
                    B[j++] = 'x';
                    for (p = 0; p < strLen(Hex); p++)
                    {
                       B[j++] = Hex[p];
                    }
            }
            B[j++] = A[i];
            k = 0;
            v = 0;
        }
    }
    if (k == 1)
    {
        digitDecToHexString(v, Hex);
        B[j++] = '0';
        B[j++] = 'x';
        for (p = 0; p < strLen(Hex); p++)
        {
             B[j++] = Hex[p];
        }
    }
}
void inputCharArray(char *S)
{
    printf("Введите строку на латинском алфавите размерностью мене 1000 символов: \n");
    scanf("%[^\n]s", S);
}
void display()
{
    char A[1000] = { '\0' };
    inputCharArray(A);
    char B[1000] = "";
    intDecToCharHex(A, B);
    printf("Входная строка: \n%s\n", A);
    printf("Строка после обработки: \n%s\n", B);
    
}
int main()
{
    setlocale(LC_ALL, "Rus");
    display();
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
10.06.2017, 07:05
Помогаю со студенческими работами здесь

Как заполнить массив char если заранее не известно сколько символов в массиве?
Есть массив с ведомым к-вом элементов, но в него могут ввести слово с любым к-вом элементов которое не превышает к-во элементов в...

Замена всех string на char*
В файле находятся строки типа «Фамилия», «Оценка», «Предмет». Вывести в файл список студентов в алфавитном порядке, у которых имеются...

Замена char на map/set
Всем привет! Задача была написать программу, которая выводит слово, которое встречается чаще всего (причем КАПСом) Имеется следующий...

Выполнить сортировку символов в строке. Порядок возрастания "весов" символов задать таблицей вида char ORD[] = "АаБбВ
Выполнить сортировку символов в строке. Порядок возрастания &quot;весов&quot; символов задать таблицей вида char ORD =...

В заданном массиве символов, определить, сколько символов предшествует заданному
Дан массив символов, среди которых есть символ двоеточие &quot;:&quot;. Определить, сколько символов ему предшествует


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru