Преобразуйте строку так, чтобы сначала в ней шли все буквы исходной строки - 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;
}

Объяснение кода листинга программы

  1. В функции order_string первым шагом являются инициализация двух указателей: head указывает на первый символ в строке s, а tail указывает на последний символ в строке s.
  2. Затем в цикле while происходит сравнение каждого символа в строке s. Если символ является буквой, то head увеличивается на 1. Если символ является цифрой, то он копируется в конец строки, а head увеличивается на 1. Это продолжается до тех пор, пока head меньше tail.
  3. В конце функции order_string возвращается исходная строка s.
  4. В функции main объявлен массив str для хранения строки, введенной пользователем.
  5. Затем в цикле while пользователю предлагается ввести строку. Если строка успешно введена, то она передается в функцию order_string, а затем выводится на экран.
  6. В конце программы возвращается 0, что означает успешное завершение программы.

Оцени полезность:

9   голосов , оценка 3.889 из 5
Похожие ответы