Дан массив из строчных латинских букв - Форум
Страница 1 из 11
Форум » Программирование » Си » Дан массив из строчных латинских букв
Дан массив из строчных латинских букв
Администратор
Уровень 999
Сообщений: 2093
Дата: Суббота, 20.07.2013, 22:50:40 | Сообщение # 1
Offline
Дан массив из строчных латинских букв. Вывести на экран в алфавитном порядке все буквы, которые входят в этот текст по одному разу.
помогите плиз, а то не получается никак...
Подпись пользователя
Администратор
Уровень 999
Сообщений: 2093
Дата: Суббота, 20.07.2013, 22:51:02 | Сообщение # 2
Offline
Код C:

Код
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
   
int Compare(const void* a, const void* b){
     return *(char*)a-*(char*)b;
}
   
int main(){
     char *matr[]={"abcemn",
                    "fedkpo",
                    "ghijqr",
                    "xwvuts",
                    "yzaala"}, res[100]={'\0'}, i, *a=res, *b=res;
     for(i=0; i<sizeof(matr)/sizeof(*matr); i++){
         strcat(res, matr[i]);
     }
     qsort(res, strlen(res), sizeof(*res), Compare);
     for(; *b=*a; ++a){
         if(*a!=*(a+1))++b;
     }
     printf("%s", res);
     return 0;
}
Подпись пользователя
Администратор
Уровень 999
Сообщений: 2093
Дата: Суббота, 20.07.2013, 22:51:57 | Сообщение # 3
Offline
Ну, во-первых массив не "дан", а вводится с клаиатуры.
Во-вторых, если массив не динамический, то имеет границы,
которые мы установим до 80 символов, включая символ конца строки \0.
В-третьих, если сказано, что массив строчных латинских букв,
то нет смысла программно проверять действительно ли это
строчные латинские буквы.

Код ++:

Код
#include <iostream>
using namespace std;
   
int main() {
      
//80 сиволов в строке включая символ конца строки \0
//26 букв в алфавите
char t[80];
  int b[26]={0};
   
       cin >> t;
   
          
         for(int i=0; t[i]!='\0'; i++)
                 ++b[int(t[i])-97];//97 это ASCII-код строчной латинской буквы "а"
          
         for(int i=0; i<26; i++)
                 if (b[i]==1) cout << t[i];
              
   
  system ("pause");
         return 0;
  }


по моему так проще и понятнее, чем предложенные здесь варианты.
Подпись пользователя
Администратор
Уровень 999
Сообщений: 2093
Дата: Суббота, 20.07.2013, 22:52:28 | Сообщение # 4
Offline
Можно вот так решить

Код C++:

Код
#include <iostream>
#include <algorithm>
using namespace std;
int main()  
{  
     char str[] = "ASASFSAWFAFASASD"; // исходный массив
     int size = strlen(str);   // размер
     sort(str, str+size);   // сортируем по алфавиту
     int flag = 0;  // количество совпадений
      
     for ( int j = 0; j < size; j++)   
     {
         for ( int i = 0; i < size; i++)  
         {  
             if(str[j] == str[i]) // если буквы совпали
                 flag++; // увеличиваем счётчик
         }  
         if(flag == 1) // если 1 значит встречается один раз
             cout << str[j];    
         flag = 0;   // сбрасываем счётчик
     }  
     cout << endl;
}
Подпись пользователя
Форум » Программирование » Си » Дан массив из строчных латинских букв
Страница 1 из 11
Поиск: