Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.06.2017, 08:59   #1
Серега_123
 
Регистрация: 04.06.2017
Сообщений: 3
По умолчанию Замена символов в массиве char

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

Мой код: он хорошо переводит только числа, символы букв не могу перевести.
#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;
}
Серега_123 вне форума Ответить с цитированием
Старый 04.06.2017, 15:57   #2
Cuprum5
Форумчанин
 
Регистрация: 09.05.2017
Сообщений: 729
По умолчанию

Цитата:
Сообщение от Серега_123 Посмотреть сообщение
Мой код: он хорошо переводит только числа, символы букв не могу перевести.
- зачем буквы-то переводить? В задании сказано только про цифры.
Cuprum5 вне форума Ответить с цитированием
Старый 04.06.2017, 16:28   #3
Cuprum5
Форумчанин
 
Регистрация: 09.05.2017
Сообщений: 729
По умолчанию

Есть стандартная функция reverse(), если что.
Cuprum5 вне форума Ответить с цитированием
Старый 04.06.2017, 17:18   #4
Cuprum5
Форумчанин
 
Регистрация: 09.05.2017
Сообщений: 729
По умолчанию

Код какой-то бредовый, если честно.:D Что Вы хотели сказать вот этой строкой:
Цитата:
Сообщение от Серега_123 Посмотреть сообщение
summ += A[i]-'A'+10;
Что вообще делает ваша программа и что вообще нужно сделать? Одно я могу сказать точно: Ваша программа выдает полный бред.
Cuprum5 вне форума Ответить с цитированием
Старый 04.06.2017, 22:46   #5
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,534
По умолчанию

Цитата:
в которой заменить числа десятичной системы счисления на их же номинал в шестнадцатеричной системе счисления.
Номинал бывает у монет, радиодеталей и пр. Что такое "номинал числа" - знает только Заратустра. Если нужно получить HEX-представление целого числа, то так и нужно говорить - простым шершавым русским языком. Делается просто: делим нацело на 16, остаток переводим в HEX и приписываем слева в формируемую строку. Могу написать на Паскале с последующим переводом путем автора на С, потому как на С давно не писал и вспоминать неохота.
Пример:
2655 / 16 = 165 остаток 15, т.е. 'F'
165 / 16 = 10 остаток 5 т.е. '5'
10 / 16 = 0 остаток 10, т.е. 'A'. Расчет закончен, имеем 'A5F'
-------------------------
Если нужно привести в HEX-виде ASCII-коды символов, то тут нет никаких арихметикав: номер позиции символа в кодовой таблице и есть его код в HEX-виде.
-------------------------
Так нет же: оказывается, в строке числа, причем их несколько. Тогда задача дополняется первой частью:
1. Очищаем число-приемник.
2. Берем очередной символ строки.
3. Если это цифра, то оставляем 4 младших бита, накладывая маску 0Fh, и прибавляем то, что осталось, к умноженному на 10 числу приемнику; идем на 2.
4. Если не цифра, но и не конец строки - переходим к следующему числу.
5. Если конец строки - выполняем вторую часть задачи (описано выше)
Вот как-то так : '255 2655' -> 'FF A5F'

"Не зная куда плыть - откуда тебе ждать попутного ветра?"

Последний раз редактировалось digitalis; 04.06.2017 в 23:23.
digitalis вне форума Ответить с цитированием
Старый 06.06.2017, 12:12   #6
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,534
По умолчанию

Карлсон, пардон - Серега_123 - улетел. И не обещал вернуться.
digitalis вне форума Ответить с цитированием
Старый 06.06.2017, 12:34   #7
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Цитата:
Сообщение от Серега_123 Посмотреть сообщение
содержит числа десятичной системы счисления
Цитата:
Сообщение от Серега_123 Посмотреть сообщение
заменить числа десятичной системы счисления на их же номинал в шестнадцатеричной системе счисления
Последовательность символов '15' должна распознаваться как '1' и '5' или как '15'? В хексе это немного разные значения
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
Sciv вне форума Ответить с цитированием
Старый 06.06.2017, 22:36   #8
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,534
По умолчанию

...

Последний раз редактировалось digitalis; 06.06.2017 в 22:37. Причина: удалил
digitalis вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Автоатическая замена содержимого char* логическим значением MerilStrayf Visual C++ 0 07.06.2015 19:55
цифры в массиве char Vladislavv Помощь студентам 5 31.07.2014 04:04
Замена в массиве Ebon Помощь студентам 2 24.12.2011 17:40
Замена или вставка символа в char *. Lazio Общие вопросы C/C++ 11 30.09.2009 19:19
Возвращение массива символов char ActioNs Общие вопросы C/C++ 3 10.01.2009 02:33