Преобразовать строку так, чтобы сначала шли цифры, а затем все буквы исходной строки, но в обратном порядке - C (СИ)
Формулировка задачи:
1)Дана строка,содержащая буквы и цифры.Преобразовать строку так,что бы сначала шли цифры,а затем все буквы исходной строки,но в обратном порядке.Использовать указатели.
2)Ввести с клавиатуры 10 целых чисел.Определить максимальное значение среди четных элементов последовательности.
3)Даны два массива а и b.Верно ли что все элементы последовательности а входят в последовательность всех элементов b?
Решение задачи: «Преобразовать строку так, чтобы сначала шли цифры, а затем все буквы исходной строки, но в обратном порядке»
textual
Листинг программы
#include <ctype.h>
#include <stdlib.h>
#include <stdio.h>
#include <memory.h>
// сначала числа далее, буквы
void transform(char* dst, const char* src) {
const char* iter = src;
while( *iter != '\0' ) {
if( isdigit(*iter) || ! isalpha(*iter))
*dst++ = *iter;
*iter++;
}
while( *src != '\0' ) {
if( isalpha(*src) || ! isdigit(*src))
*dst++ = *src;
*src++;
}
*dst = '\0';
}
// проверяет входит ли множестов массива - in_arr, в массив arr
int in_array(const int* in_arr, int in_size, const int* arr, int size) {
int len = 0, bound = 0;
if(in_size > size)
return 0;
for(len = 0; len < size - in_size; len++) {
if(! memcmp(arr + len, in_arr, in_size * sizeof(int)))
return 1;
}
return 0;
}
// тест
int main(void)
{
int A[4] = { 2, 4, 5, 5 };
int B[] = { 0, 2, 4, 5, 0, 5, 3, 7,
2, 4, 5, 5, -5, 7, 9, 9 };
char str[] = "Secondary-2001, api *12, seventy off -7745-";
char sout[255];
if(in_array(A, sizeof(A)/sizeof(int), B, sizeof(B)/sizeof(int)))
puts("yes A-array to enter B-array.");
else
puts("not A-array");
transform(sout, str);
printf("%s\n", sout);
system("pause");
return 0;
Объяснение кода листинга программы
- Сначала программа проверяет, входит ли массив A в массив B, используя функцию in_array.
- Затем программа преобразует строку str, используя функцию transform.
- В функции transform, сначала числа копируются в целевую строку, а затем буквы копируются в обратном порядке.
- В функции in_array, программа проверяет, есть ли все элементы массива A в массиве B.
- Если все элементы массива A есть в массиве B, программа выводит
да A-массив входит в B-массив. - Если хотя бы один элемент массива A отсутствует в массиве B, программа выводит
нет A-массива. - Затем программа преобразует строку
strвsoutс помощью функции transform. - Наконец, программа выводит преобразованную строку
sout.