Удалить из массива повторяющиеся символы и отсортировать по алфавиту - C (СИ)

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

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

Вообще задание звучит так: Разработать приложение, выполняющее следующие функции. Ввести с клавиатуры значения элементов символьного одномерного массива. Удалить из него повторяющиеся символы и отсортировать по алфавиту (методом выбора). Не правильно работает часть программы где нужно удалить повторяющиеся символы Код:
#include<stdio.h>
#include<string.h>
#include <conio.h>
void main()
{
    char  A[11];
    int i,j,k,f,n,p;
    char b;
    
    printf("Vvedite massiv A\n");
    for(i=0; i<10; i++)
    {
        printf("Vvedite A[%d]=",i);
        scanf("%s", &A[i]);
        printf("\n");
    }
    printf("vvedenniy massiv\n");
    for(i=0; i<10; i++)
        printf("A[%d]= %c \n",i,A[i]);

      printf("\nEnten number of elements: ");
        scanf("%u",&n);
        printf("\nEnter elements: ");
        for (i=0; i<n; i++)
                scanf("%u",&p[i]);

    for(j=0; j<9; j++)
        for(i=j+1; i<10; i++)
        {if(A[j]==A[i]) 
            {
                A[i]=A[i+1];    
            } 
        }
        f=strlen(A);
    printf("massiv posle udaleniya povtorov \n");
    for(i=0; i<f; i++)
        printf("A[%d]= %c \n",i,A[i]);
    
  n=9;
  for (i = 0; i < n - 1; i++) 
  { 
    for (k = i, j = i + 1; j < n; j++) /* находим в цикле */ 
      if(A[j] < A[k])   /* минимальный элемент */ 
        k = j;          /* и запоминаем его номер в k */ 
    b=A[i];A[i]=A[k];A[k]=b; /* меняем местами минимальный и элем., */
  }                     /* с которого начинался цикл */ 
  printf("massiv posle sortirovki \n");
for(i=0; i<f; i++)
        printf("A[%d]= %c \n",i,A[i]);
}

Решение задачи: «Удалить из массива повторяющиеся символы и отсортировать по алфавиту»

textual
Листинг программы
#include <stdio.h>
#include <string.h>
#define size 128
void erase(char * str,unsigned index){
        while (str[index])    //пока str[index] не равен символу конца строки
                str[index]=str[index+++1]; //присваиваем элементам, начиная с index, следующие за ним элементы
}
int main(){
        char s[size]="\0";
        printf("string:\n");
        for (int i=-1; s[i++]!='\n'; scanf("%c",&s[i])); //посимвольное считывание, пока не попадется ентер  
        s[strlen(s)-1]='\0'; //удаляем ентер с конца строки... можете более симпатичный ввод сделать, это ужас=)
        printf("string - %s\n",s);   //выводим считанную строку
        char recsym[size]="\0";   //тут будут лежать повторяющиеся символы
        for (unsigned i=0,j=0; s[i]; i++)  //идем циклом по строке 
                if (strchr(recsym,s[i])) erase(s,i--); else recsym[j++]=s[i]; //если символ есть во второй строке, то удаляем его, иначе заносим в массив повторяющихся символов 
        printf("string without recurrent symbols - %s\n",s);  //выводим строку уже без повторяющихся символов
        for (unsigned i=0; i < strlen(s)-1; i++)         //это
                for (unsigned j=i+1; s[j]; j++)          //это тоже
                        if (s[i]>s[j]) {char temp; temp=s[i]; s[i]=s[j]; s[j]=temp;} //и это-сортировка
        printf("sorted string - %s\n",s);  //выводим отсортированную строку
        return 0;
}

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

  1. Включаем необходимые заголовочные файлы для работы с памятью и строками
  2. Определяем размер массива, который будет использоваться в программе
  3. Создаем функцию erase, которая удаляет определенный символ из строки, заменяя его на следующий за ним символ
  4. В функции main считываем строку с помощью scanf и удаляем из нее символ новой строки
  5. Создаем массив recsym для хранения повторяющихся символов
  6. Проходим по исходной строке, проверяем наличие каждого символа в массиве recsym, если символ есть - удаляем его из строки с помощью функции erase, иначе добавляем его в массив recsym
  7. Выводим исходную строку без повторяющихся символов
  8. Сортируем строку с помощью двух вложенных циклов, сравнивая символы и меняя их местами при необходимости
  9. Выводим отсортированную строку
  10. Завершаем программу

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


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

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

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