Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
1 / 1 / 0
Регистрация: 20.09.2021
Сообщений: 33
1

Заменить числа в тексте на шестнадцатеричные

28.01.2022, 00:31. Показов 1223. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Задача: Заменить все числа в тексте на их шестнадцатеричное представление. Вывод результата должен быть осуществлён одной командой. То есть нужно сначала сформировать строку с ответом, а потом уже её выводить. Не допускается вывод результата по частям. Пример: I bought an apartment for 255. I did it in my 40. -> I bought an apartment for FF. I did it in my 28. Только начала изучать С++. Знаю, что можно перевести при помощи std::hex << n , но не понимаю как сделать это со строкой.
Вот код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
#include <string>
using namespace std;   
 
int main()
{
    int i=0;
    string str="I bought an apartment for 255. I did it in my 40.", str1;
    string substr="0123456789";
    
    while(str[i])
    {
        str1+=str[i];
        if (substr.find(str[i])!=std::string::npos) //поиск нужных символов
        //тут должен быть перевод чисел и формирование строки;
        i++;
    }    
    cout << "\nStr: " << str << "\n";
    cout << "Result: " << str1 << "\n\n";
return 0;
}
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
28.01.2022, 00:31
Ответы с готовыми решениями:

В строке десятичные константы заменить на шестнадцатеричные
Здравствуйте всем, помогите пожалуйста с этим заданием: Функция находит в строке десятичные...

Заменить все встречающиеся в тексте числа на эти же числа, но в двоичной системе счисления
На планете Роботов очень не любят десятичную систему счисления, поэтому они попросили Вас написать...

Заменить все встречающиеся в тексте числа на эти же числа в двоичной системе счисления
Условие задачи: На планете Роботов очень не любят десятичную систему счисления, поэтому они...

Заменить все встречающиеся в тексте числа на эти же числа, но в двоичной системе счисления
На планете Роботов очень не любят десятичную систему счисления, поэтому они попросили Вас написать...

Заменить в тексте запись числа прописью на сами числа
Данная строка. Если в строке есть слова, которые выглядят как запись цифры с помощью российско...

5
 Аватар для SmallEvil
3719 / 2648 / 761
Регистрация: 29.06.2020
Сообщений: 9,800
28.01.2022, 03:12 2
Лучший ответ Сообщение было отмечено Natalli666 как решение

Решение

вариант :
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
#include <iostream>
#include <string>
 
using namespace std;   
using substr_t = pair<size_t, size_t>; 
substr_t parseNumber(const string& text, size_t pos = 0){
    for(size_t j, i = pos; i< text.size(); ++i)
        if (isdigit(text[i])){
            for(j = i+1; j < text.size(); ++j)
               if (!isdigit(text[j]))
                   return {i,j};
            return {i,j};
        }
    return {string::npos, string::npos};
}
int main()
{
    string str="I bought an apartment for 255. I did it in my 40.", res;
    char snumber[20];
    substr_t number_info;
    size_t last_pos = 0;
    res.reserve(str.size());
    number_info = parseNumber(str, last_pos);
    while(number_info.first != string::npos){
        sprintf( snumber, "%x", stoi(str.substr(number_info.first, number_info.second - number_info.first)));
        res += str.substr(last_pos, number_info.first - last_pos) + snumber;
        last_pos = number_info.second;
        number_info = parseNumber(str, last_pos);
        snumber[0]='\0';
    }
    res += str.substr(last_pos, str.size() - last_pos);
            
    cout << "\nStr: " << str << "\n";
    cout << "Result: " << res << "\n\n";
}
0
1 / 1 / 0
Регистрация: 20.09.2021
Сообщений: 33
28.01.2022, 13:28  [ТС] 3
Цитата Сообщение от SmallEvil Посмотреть сообщение
вариант :
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
#include <iostream>
#include <string>
 
using namespace std;   
using substr_t = pair<size_t, size_t>; 
substr_t parseNumber(const string& text, size_t pos = 0){
    for(size_t j, i = pos; i< text.size(); ++i)
        if (isdigit(text[i])){
            for(j = i+1; j < text.size(); ++j)
               if (!isdigit(text[j]))
                   return {i,j};
            return {i,j};
        }
    return {string::npos, string::npos};
}
int main()
{
    string str="I bought an apartment for 255. I did it in my 40.", res;
    char snumber[20];
    substr_t number_info;
    size_t last_pos = 0;
    res.reserve(str.size());
    number_info = parseNumber(str, last_pos);
    while(number_info.first != string::npos){
        sprintf( snumber, "%x", stoi(str.substr(number_info.first, number_info.second - number_info.first)));
        res += str.substr(last_pos, number_info.first - last_pos) + snumber;
        last_pos = number_info.second;
        number_info = parseNumber(str, last_pos);
        snumber[0]='\0';
    }
    res += str.substr(last_pos, str.size() - last_pos);
            
    cout << "\nStr: " << str << "\n";
    cout << "Result: " << res << "\n\n";
}
Можете немного объяснить как это работает?
0
 Аватар для SmallEvil
3719 / 2648 / 761
Регистрация: 29.06.2020
Сообщений: 9,800
28.01.2022, 13:44 4
функция parseNumber() ищет первое число начиная из позиции pos,
возвращает пару значений, начало и конец числа в строке.
если чисел в тексте больше нет, возвращает пару чисел , максимальное значение целого типа , она же константа string::npos.
C++
1
sprintf( snumber, "%x", stoi(str.substr(number_info.first, number_info.second - number_info.first)));
в этой строке происходит само преобразования текстового представления числа из 10-ой СС в 16-ую.

stoi(str.substr(number_info.first, number_info.second - number_info.first)
из текста 10-ой СС в встроенный бинарный тип,
sprintf( snumber, "%x", <числовая переменная> ) - из бинарного в текстовый уже в 16-ой СС.
Дальше формируется выходная строка, посредством копирования под строк, до числа + число.
После цикла, добавляем остаток нечисловой части строки, если осталась.
3
0 / 0 / 0
Регистрация: 09.05.2022
Сообщений: 24
10.01.2023, 11:41 5
Как сделать чтобы не 16ичную а двоичную систему?

Добавлено через 44 минуты
Как сделать чтобы только в бинарном виде?
0
 Аватар для abit
497 / 453 / 138
Регистрация: 03.02.2013
Сообщений: 1,423
10.01.2023, 12:11 6
Я бы не слушал про printf и юзал C++ стиль, там есть std::bitset
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
#include <iostream>
#include <sstream>
#include <string>
#include <bitset>
 
 
using namespace std;   
using substr_t = pair<size_t, size_t>; 
substr_t parseNumber(const string& text, size_t pos = 0){
    for(size_t j, i = pos; i< text.size(); ++i)
        if (isdigit(text[i])){
            for(j = i+1; j < text.size(); ++j)
               if (!isdigit(text[j]))
                   return {i,j};
            return {i,j};
        }
    return {string::npos, string::npos};
}
int main()
{
    string str="I bought an apartment for 255. I did it in my 40.", res;
    char snumber[20];
    substr_t number_info;
    size_t last_pos = 0;
    std::stringstream ss;
    number_info = parseNumber(str, last_pos);
    while(number_info.first != string::npos){
        ss << str.substr(last_pos, number_info.first - last_pos) << std::bitset<8>(stoi(str.substr(number_info.first, number_info.second - number_info.first)));
        last_pos = number_info.second;
        number_info = parseNumber(str, last_pos);
        snumber[0]='\0';
    }
    ss<<str.substr(last_pos, str.size() - last_pos);
            
    cout << "\nStr: " << str << "\n";
    cout << "Result: " << ss.str() << "\n\n";
}
0
10.01.2023, 12:11
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
10.01.2023, 12:11
Помогаю со студенческими работами здесь

Заменить в строке символьные константы вида 'А' на соответствующие шестнадцатеричные (т.е. 'А' на 0x41)
Помогите пожалуйста !

Найти в строке десятичные константы и заменить их на шестнадцатеричные с тем же значением
Здраствуйте. Я сделал программу на Си по указателям, очень прошу проверить правильна ли она....

Заменить в строке символьные константы вида 'А' на соответствующие шестнадцатеричные (те 'А' на 0x41)
Помогите пожалуйста с решением трёх задач, нужно решить на &quot;Dev С++&quot; 2. Заменить в строке ...

Шестнадцатеричные числа
Приветствую уважаемые форумчане. Не могу понять. MySql показывает шестнадцатеричные значение...

Проверить, какие флаги потока вывода установлены и заменить попарно десятичные на шестнадцатеричные (.)
Проверить, какие флаги потока вывода установлены и заменить попарно десятичные на шестнадцатеричные...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Элементы алгоритмизации
hw_wired 28.01.2025
Основы алгоритмизации В современном мире алгоритмы играют фундаментальную роль в развитии информационных технологий и программирования. Понимание основ алгоритмизации является ключевым элементом в. . .
Человек и информация
hw_wired 28.01.2025
Введение: роль информации в познании мира В современном мире информация играет фундаментальную роль в процессе познания окружающей действительности. Она представляет собой совокупность сведений об. . .
Компьютер и информация
hw_wired 28.01.2025
Эволюция вычислительных машин История развития вычислительной техники начинается задолго до появления первых электронных устройств. Человечество всегда стремилось упростить процесс вычислений и. . .
Информационные технологии
hw_wired 28.01.2025
Введение в современные технологии работы с информацией В современном мире информационные технологии стали неотъемлемой частью практически всех сфер человеческой деятельности. Они существенно. . .
Информация вокруг нас
hw_wired 28.01.2025
Основные понятия информации В современном мире понятие информации является фундаментальным и охватывает практически все сферы человеческой деятельности. Информация представляет собой совокупность. . .
Компьютер для начинающих
hw_wired 28.01.2025
Введение в мир компьютерных технологий В современном мире информация стала одним из важнейших ресурсов человечества, определяющим развитие общества и технологий. Наша жизнь неразрывно связана с. . .
[golang] 189. Rotate Array
alhaos 28.01.2025
Повороты рукоятки, целочисленный слайс нужно сдвинуть на целое положительное число. Мне очень нравится решение на GO / / https:/ / leetcode. com/ studyplan/ top-interview-150/ package topInterview . . .
КуМир: решение задач на матрицы
bytestream 28.01.2025
КуМир представляет собой среду для обучения программированию, которая включает в себя мощные инструменты для работы с матрицами. Матрица в программировании - это двумерный массив, состоящий из. . .
КуМир: решение задач на строки
bytestream 28.01.2025
В системе программирования КуМир работа со строковыми данными является одним из важнейших аспектов создания программ. Строки представляют собой последовательности символов, заключенные в кавычки,. . .
КуМир: решение геометрических задач
bytestream 28.01.2025
Программирование геометрических задач в среде КуМир становится всё более актуальным в обучении школьников и студентов. КуМир — это разработанная в России обучающая программная среда, предназначенная. . .
КуМир, исполнитель Водолей: Задачи и решения
bytestream 28.01.2025
КуМир — это образовательная среда для обучения программированию. Она предлагает пользователям разнообразные инструменты для разработки и отладки программ, что особенно ценно для студентов и. . .
КуМир, исполнитель Чертежник: Решение задач
bytestream 28.01.2025
КуМир (Комплект Учебных МИРов) представляет собой образовательную среду для обучения основам программирования и алгоритмизации. Исполнитель Чертежник работает на координатной плоскости, где может. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru