Строка: Если все символы A входят в B, то упорядочить символы B в порядке, обратном алфавитному... - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Даны строки A и B. Если все символы A входят в B и в B есть повторяющиеся сим-волы, то упорядочить символы B в порядке, обратном к алфавитному, удалив повторяющиеся символы, и удалить русские буквы из A; в остальных случаях удалить из A символы, не входящие в B и продублировать цифры в B. Собственно с массивами чисел и их обработкой разобрался вчера, переделав кучу вариантов различных задач, теперь же проблема в строках. Читал про функции для работы с ними, но как решить эту задачу через них, не совсем представляю. P.S. Такой уж я человек, что только разобрав код, могу понять как делать подобное )
Попытался по примерам подобных программ написать часть своей, но после ввода сток ничего не происходит, просто мигает курсор и окно не исчезает
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>
 
int main()
{
    int i,j,k,e,lb;
    char A[80],B[80],min;
 
    printf("Enter the string A:");
    gets(A);
    printf("Enter the string B:");
    gets(B);
    char VerifA1[]="АаБбВвГгДдЕеЁёЖжЗзИиЙйКкЛлМмНнОоПпРрСсТтУуФфХхЦцЧчШшЩщЪъЫыЬьЭэЮюЯя";
    e=0;
    for(i=strlen(A)-1;i>=0;i--)
    {
        if(A[i] == B[i])
        {
            e=1;
        }
    }
    i=0;
    int e1=0;
    while(i<=strlen(B)-1)
    {
        for(j=strlen(B)-1;j>i;j--)
        {
            if(B[i]!=B[j])
            {
                e1=1;
            }
            i++;
        }
    }
    if ((e = 1) && (e1 = 1))
    {
        for(i=strlen(A)-1;i>=0;i--)
        {
            if(strchr(VerifA1,A[i])!=NULL)
            {
                for(j=i;j<strlen(A);j++)
                {
                    A[j]=A[j+1];
                }
            }
        }
        for(i=0;i<=strlen(B)-2;i++)
        {
            min=B[i];
            k=i;
            for(j=i+1;j<=strlen(B)-1;j++)
            {
                if(B[j]<min)
                {
                    min=B[j];
                    k=j;
                }
            }
            B[k]=B[i];
            B[i]=min;
        }
        i=0;
        while(i<=strlen(B)-1)
        {
            for(j=strlen(B)-1;j>i;j--)
            {
                if(B[i]==B[j])
                {
                    for(k=j;k<strlen(B);k++)
                    {
                        B[k]=B[k+1];
                    }
                }
            }
            i++;
        }
 
    }
    printf("A:");
    puts(A);
    printf("B:");
    puts(B);
    return 0;
}

Решение задачи: «Строка: Если все символы A входят в B, то упорядочить символы B в порядке, обратном алфавитному...»

textual
Листинг программы
#include <stdio.h>
 
int is_rus(char );
void delete_rus(char *);
int main()
{
    char A[] = "I Я hear слыхал theдre's щ rumors ходят слухи on the в этих, uh как их,
                           Internets... интернетах";
    delete_rus(A);
    puts(A);
    return 0;
}
int is_rus(char c)
{
    char azbuka[]="АаБбВвГгДдЕеЁёЖжЗзИиЙйКкЛлМмНнОоПпРрСсТтУуФфХхЦцЧчШшЩщЪъЫыЬьЭэЮюЯя";
    for(int i = 0; azbuka[i]; i++)
        if(c == azbuka[i])
            return 1;
    return 0;
}
void delete_rus(char *str)
{
    char *start, *end;
    for ( ; *str; str++){
        if(is_rus(*str)){
            start = str;
            end = start + 1;
            while(*end && is_rus(*end))
                end++;
            while(*end)
                *start++ = *end++;
            *start = '\0';
        }
 
    }
}

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

  1. В функции is_rus определяется, является ли символ русским.
  2. В функции delete_rus ищется первый русский символ в строке.
  3. Если русский символ найден, то он помечается как удаляемый.
  4. В цикле происходит перебор символов строки, начиная с последнего.
  5. Если текущий символ является русским, то он удаляется путем замены на следующий нерусский символ.
  6. Если русский символ не найден, то он помечается как не удаляемый.
  7. В конце строки добавляется нулевой символ.
  8. В функции main вызывается функция delete_rus для строки A.
  9. Затем выводится измененная строка A.
  10. В конце программы возвращается значение 0, указывающее на успешное выполнение программы.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

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

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