Лабораторная работа 1
Массивы, указатели и строки. Методы организации и работы
Вариант задания реализовать в виде функции, использующей для работы со строкой только указатели и операции вида *p++, p++ и т.д. Если функция возвращает строку или ее фрагмент, то это также необходимо сделать через указатель.
Вариант 7. Функция находит в строке десятичные константы и заменяет их на шестнадцатеричные с тем же значением, например "aaaaa258xxx" на "aaaaa0x102xxx".
Примечание: функция, производящая поиск некоторого фрагмента переменной размерности, может либо запоминать эту размерность во внешней переменной, либо отмечать каким-либо символом окончание этого фрагмент в самой строке.
//---------------------------------------------------------------------------
#pragma hdrstop
//---------------------------------------------------------------------------
#include
#include
#include
#include
#define BUFF_SIZE 50
#pragma argsused
void start(char* buf, int len); // генерация произвольной строки
void print(char* buf, int len); // вывод на экран массива символов
void convert(char* buf, char* buf1, int len); // поиск и преобразование 10-х чисел в 16-е числа
void printrus(char* format,...); // перекодировка в кириллицу
int main()
{
char mas[BUFF_SIZE], buf[BUFF_SIZE];
printrus("Исходные данные:\n");
start(mas, BUFF_SIZE); // генерируем строку
print(mas, BUFF_SIZE); // выводим ее на экран
printrus("\n\nПреобразованная строка:\n");
convert(mas, buf, BUFF_SIZE); //находим 10-е числа, преобразовываем их в 16-е и выводим на экран
printrus("\n\n");
system("pause");
return 0;
}
//---------------------------------------------------------------------------
// генерация произвольной строки
void start(char* buf, int len)
{
int i, j;
srand(time(NULL));
for(; len>0; len--)
{
i = 1 + rand() % 2;
if( i % 2 == NULL ) *buf = 65 + rand() % 26;
else *buf = 48 + rand() % 10;
buf++;
}
}
//---------------------------------------------------------------------------
// вывод на экран массива символов
void print(char* buf, int len)
{
for(; len>0; len--)
{
printrus("%c", *buf);
buf++;
}
}
//---------------------------------------------------------------------------
// поиск и преобразование 10-х чисел в 16-е числа
void convert(char* buf, char* buf1, int len)
{
int i=0, res;
for(; len>0; len--)
{
if( *buf >= 'A' ) printrus("%c", *buf);
else buf1[i++] = *buf;
buf++;
if( *buf >= 'A' && i || len == 1 && i )
{
buf1[i] = 0;
i = 0;
res = atoi(buf1);
printrus("0x");
sprintf(buf1, "%x", res);
printrus("%s", buf1);
}
}
}
//---------------------------------------------------------------------------
// выводим на экран кириллицу
void printrus(char* format,...)
{
char buf[254];
va_list ptr;
CharToOem(format,buf);
va_start(ptr,format);
vprintf(buf,ptr);
}
//---------------------------------------------------------------------------
|