Вывести уникальные значения двухмерного символьного массива - C (СИ)
Формулировка задачи:
Добрый день.
Помогите с программой.Дан двухмерный символьный массив к нему написать функцию вывода уникальных значений.
Вот что есть на данный момент :
Функция работает если значения были друг за другом, как сделать поиск по всему двумерному массиву
int sortirovka( char *array[], int n){
int i, j,k;
for(i=0; i<n-1; i++){
for(j=n-1; j>i; j--){
if(strcmp(array[j-1],array[j])==0){
array[j]=array[j+1];
}
}
}
return 0;
}Решение задачи: «Вывести уникальные значения двухмерного символьного массива»
textual
Листинг программы
#include <stdio.h>
#include <string.h>
#define N 32
void out_unique(FILE* _o, char* a[], int n){
int i, j;
char* k;
//сначало сортируем
for(i = 1; i < n; ++i){
k = a[i];
j = i - 1;
while((j >= 0) && (strcmp(k, a[j]) < 0)){
a[j + 1] = a[j];
--j;
}
a[j + 1] = k;
}
//далее выводим только уникальные строки
for(i = 0; i < n; i = j){
for(j = i + 1; j < n; ++j){
if(strcmp(a[j], a[i]) != 0)
break;
}
if((j - i) == 1)
fprintf(_o, "%s\n", a[i]);
}
}
int main(void){
char* a[N];
int n;
char *i, s[] = "perl, php, js, php, ruby, js, python, ruby.";
n = 0;
for(i = strtok(s, " ,."); i != NULL; i = strtok(NULL, " ,."))
a[n++] = i;
out_unique(stdout, a, n);
return 0;
}
Объяснение кода листинга программы
Выводим уникальные значения двухмерного символьного массива:
- Включаем необходимые заголовочные файлы
и , также определяем размер массива N. - Создаём функцию out_unique, принимающую два аргумента: файл, куда необходимо вывести результат, и отсортированный массив.
- В функции out_unique выполняем сортировку массива методом пузырька.
- Далее, с помощью двух вложенных циклов, удаляем дубликаты, оставляя только уникальные строки.
- Выводим результат на экран.
- В функции main создаём массив типа char*, инициализируем его значениями из строки s.
- С помощью функции strtok разделяем строку на подстроки и добавляем их в массив.
- Вызываем функцию out_unique, передавая в неё указатель на первый элемент массива, его размер и файл, куда необходимо вывести результат.
- Возвращаем 0, чтобы указать, что программа успешно завершилась.