Массив Запись нового массива. - C (СИ)
Формулировка задачи:
Здраствуйте.
У меня такая проблема, в новом массиве n (функция zamena) записываются повторные вхождения и символы, которых не должно быть. Помогите пожалуйста.
Вот собственно задание:
В исходном массиве (размер 100 элементов), заполненном символами латинского алфавита и цифр, замените все повторные вхождения каждого символа пробелом, а все повторяющиеся символы поместите во второй массив. Выполните сортировку полученных массивов. Для контроля результата сделайте распечатку массивов, в том числе исходного.
#include <stdio.h>
#include <windows.h>
#define N 10
char RandomFill(char a[N])
{
char c,k,i;
for (i=0;i<=N;i++)
{
k=0;
do
{
c=rand()%255;
if ((c>='A' && c<='Z') || (c>='a' && c<='z') || (c>='0' && c<='9') ) a[i]=c,k=1;
}
while (k!=1);
}
}
char print(char p[N])
{
int i;
for (i=0;i<=N;printf("%c",p[i]),i++);
printf("\n\n");
}
char zamena(char z[N], char n[])
{
int i,j,k,m;
k=-1;
for (i=0;i<=N-1;i++)
{
m=0;
for (j=i+1;j<=N;j++)
{
if (z[i]==' ') break;
if (z[i]==z[j]) z[j]=' ',k++,n[k]=z[i],m=1;
}
if (m!=0) k++,n[k]=z[i],z[i]=' ';
}
}
void main()
{
char Mas[N],NMas[N],str[50];
srand(time(0));
RandomFill(Mas);
CharToOem("Исходный массив:\n",str); printf("%s",str);
print(Mas);
zamena(Mas,NMas);
CharToOem("Массив без повторных вхождений:\n",str); printf("%s",str);
print(Mas);
CharToOem("Новый массив:\n",str); printf("%s",str);
print(NMas);
}Решение задачи: «Массив Запись нового массива.»
textual
Листинг программы
#include <stdio.h>
#include <windows.h>
#define N 20
char RandomFill(char a[N]){
char c, k, i;
for (i=0; i<N; i++){
k=0;
do{
c=rand()%255;
if((c>='A' && c<='Z') || (c>='a' && c<='z') || (c>='0' && c<='9') )a[i]=c, k=1;
}
while (k!=1);
}
}
char print(char p[N]){
int i;
for (i=0; i<N; i++){
if(p[i]=='\0') break;
printf("%c", p[i]);
}
printf("\n\n");
}
char zamena(char z[N], char n[N]){
int i, j, k=-1;
for (i=0; i<N; i++){
for (j=i+1; j<N; j++){
if (z[i]==' ') break;
if (z[i]==z[j]) z[j]=' ', k++, n[k]=z[i];
}
}
n[k+1]='\0';
}
void sort(char mas[N]){
char tmp;
int i, j;
for(i=0; i<N; i++){
tmp=mas[i];
for(j=i-1; j>=0&&mas[j]>tmp; --j){
mas[j+1]=mas[j];
}
mas[j+1]=tmp;
}
}
int main(){
char Mas[N], NMas[N], str[50];
srand(time(0));
RandomFill(Mas);
sort(Mas);
CharToOem("Исходный массив:\n", str); printf("%s", str);
print(Mas);
zamena(Mas, NMas);
sort(Mas);
CharToOem("Массив без повторных вхождений:\n", str); printf("%s", str);
print(Mas);
CharToOem("Новый массив:\n", str); printf("%s", str);
print(NMas);
return 0;
}
Объяснение кода листинга программы
- Объявлены функции:
RandomFillprintzamenasortmainи массивы:MasNMasstr
- В функции
mainинициализированы массивыMasиNMas. - Вызвана функция
RandomFill, которая случайным образом заполняет массивMasсимволами из диапазона от 'A' до 'Z', от 'a' до 'z' и от '0' до '9'. - Вызвана функция
sort, которая сортирует массивMasв порядке возрастания. - С помощью функции
CharToOemв буферstrпреобразованы символы строкиИсходный массив:. - В консоль выведено содержимое буфера
strс помощью функцииprintf. - Вызвана функция
print, которая выводит на экран содержимое массиваMas. - Вызвана функция
zamena, которая удаляет повторяющиеся элементы из массиваMasи добавляет их в массивNMas. - Вызвана функция
sort, которая сортирует массивMasв порядке возрастания. - С помощью функции
CharToOemв буферstrпреобразованы символы строкиМассив без повторных вхождений:. - В консоль выведено содержимое буфера
strс помощью функцииprintf. - Вызвана функция
print, которая выводит на экран содержимое массиваMas. - С помощью функции
CharToOemв буферstrпреобразованы символы строкиНовый массив:. - В консоль выведено содержимое буфера
strс помощью функцииprintf. - Вызвана функция
print, которая выводит на экран содержимое массиваNMas. - Программа завершена, возвращено значение 0.