Сортировка букв в тексте в алфавитном порядке - C (СИ)
Формулировка задачи:
Добрый день. Нужна ваша помощь с исправлением программы. Программа должна выводить слова в алфавитном порядке. Но нужно, чтобы буквы при отображении не повторялись и нужно чтобы каждая буква выводилась с новой строки. Вот код:
Код:
Если кто поможет, буду очень благодарен....
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char a[40],t;
int i,j;
printf("\n Vvedite slovo :- ");
scanf("%s",a);
for(i=0;a[i]!='\0';i++)
{
for(j=i+1;a[j]!='\0';j++)
{
if (a[i]>a[j])
{
t=a[i];
a[i]=a[j];
a[j]=t;
}
}
}
printf("Slovo v alfavitnom poriadke:- %s\n",a);
system("pause");
return 0;
}Решение задачи: «Сортировка букв в тексте в алфавитном порядке»
textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
char **skaityti (char *s)
{
FILE *Failas;
char **A1;
if ( (Failas = fopen( "skaityk.txt", "r" )) == NULL )
{
printf("Fajl ne najden.");
exit(1);
}
else
{
fscanf(Failas,"%s\n", s);
A1 = (char**) malloc(*s * sizeof(char*));
printf("Vvedennyje simvoli:\n");
printf("%s\n", s);
}
fclose(Failas);
return (char**) A1;
}
void irasyti (char **A1, char s)
{
FILE *F;
if ((F = fopen( "rezultatas.txt", "w" )) == NULL )
{
printf("Ne udalos sozdat fail rezultata");
exit(1);
}
printf(F,"Tekst v alfavitnom poriadke: %s",s);
fclose(F);
}
char **rusiavimas (char **A, char s)
{
int **ptr;
while ( printf("Word: ") && scanf("%63s", s) == 1 ) {
int cnt[256] = { 0 }, ptr;
for ( ptr = 0; s[ptr]; ++ptr )
cnt[s[ptr]]++;
for ( ptr = 0; ptr < 256; ++ptr )
if ( cnt[ptr] )
printf("%c\n", ptr);
}
return (char**) ptr;
}
int main()
{
char **Mat1, s;
Mat1 = (char**) skaityti(&s);
Mat1 = rusiavimas(Mat1,s);
irasyti(Mat1,s);
free(Mat1);
system("pause");
return 0;
}
Объяснение кода листинга программы
- В функции
skaitytiоткрывается файлskaityk.txtдля чтения. - Если файл не может быть открыт, выводится сообщение об ошибке и программа завершается.
- Если файл успешно открыт, из него считывается строка в переменную
s. - Выделяется память под массив указателей на строки, размер которого равен длине строки
s. - Выводится сообщение о введенных символах и их количестве.
- В функции
irasytiоткрывается файлrezultatas.txtдля записи. - Если файл не может быть открыт, выводится сообщение об ошибке и программа завершается.
- В файл
rezultatas.txtзаписывается строкаsв алфавитном порядке. - В функции
rusiavimasсчитываются слова из стандартного ввода до тех пор, пока не будет введено пустое слово. - Для каждого символа в слове подсчитывается количество его вхождений в строку
s. - Выводится количество вхождений каждого символа.
- В функции
mainсчитываются слова из файлаskaityk.txt. - Результат сортировки записывается в файл
rezultatas.txt. - Программа ожидает нажатия клавиши для завершения работы.
- Выделяется память под массив указателей на строки
Mat1и освобождается после использования. - В функции
mainне происходит возврата значения, поэтому возвращаем 0.