Преобразуйте строку так, чтобы сначала в ней шли все буквы исходной строки - C (СИ)
Формулировка задачи:
Имеется строка, содержащая буквы и цифры. Преобразуйте эту строку чтобы сначала в ней шли все буквы исходной строки, а потом - все цифры исходной строки, но в обратном порядке.
Допустимые символы - цифры; прописные и строчные латинские буквы.
Примеры:
Исходная строка Результат
ad2e57b6 adeb6752
Стрижем.Kozloff. Недопустимый символ - "."
Решение задачи: «Преобразуйте строку так, чтобы сначала в ней шли все буквы исходной строки»
textual
Листинг программы
#include <stdio.h>
#include <string.h>
#include <ctype.h>
/*
Имеется строка, содержащая буквы и цифры. Преобразуйте эту строку
чтобы сначала в ней шли все буквы исходной строки, а потом - все цифры
исходной строки, но в обратном порядке.
Допустимые символы - цифры; прописные и строчные латинские буквы.
*/
char * order_string(char * s) {
char * head = s, * tail = s + strlen(s) - 1;
while ( head < tail ) {
if ( ! isdigit(*head) )
++head;
else {
char tmp = *head;
memmove(head, head + 1, tail - head);
*tail-- = tmp;
}
}
return s;
}
int main(void) {
char str[256];
while ( printf("String: ") && scanf("%255[0-9A-Za-z]%*c", str) == 1 )
printf("Result: %s\n", order_string(str));
return 0;
}
Объяснение кода листинга программы
- В функции
order_stringпервым шагом являются инициализация двух указателей:headуказывает на первый символ в строкеs, аtailуказывает на последний символ в строкеs. - Затем в цикле
whileпроисходит сравнение каждого символа в строкеs. Если символ является буквой, тоheadувеличивается на 1. Если символ является цифрой, то он копируется в конец строки, аheadувеличивается на 1. Это продолжается до тех пор, покаheadменьшеtail. - В конце функции
order_stringвозвращается исходная строкаs. - В функции
mainобъявлен массивstrдля хранения строки, введенной пользователем. - Затем в цикле
whileпользователю предлагается ввести строку. Если строка успешно введена, то она передается в функциюorder_string, а затем выводится на экран. - В конце программы возвращается 0, что означает успешное завершение программы.