Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
SmashBrain
0 / 0 / 0
Регистрация: 09.04.2013
Сообщений: 30
1

Вывести те слова, в которых все символы разные

27.05.2013, 21:13. Просмотров 1045. Ответов 6
Метки нет (Все метки)

дано массив слов, и в каждом слове от 1 до 8 символов. Вывести те слова, в которых все символы разные
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.05.2013, 21:13
Ответы с готовыми решениями:

Найти слова, первый и последний символы которых совпадают, и вывести эти слова и их количество
Нужно найти слова, у которых совпадают первый и последний символы, посчитать их количество и...

Вывести все слова четной длины, у которых все буквы из первой половины слова встречаются во второй
Задача: Дана последовательность символов, состоящая из слов четной длины. Вывести на экран все...

Продублировать рядом слова, в которых все символы различны
Со строками вообще проблемы. Помогите написать такую программу. Вводится строка символов. Слово -...

В функции вывести на экран все слова строки длина которых больше длины первого слова
Вывести символьную строку. В функции вывести на экран все слова строки длина которых больше длины...

В заданном массиве строк найти все слова, в которых 2 раза встречается символ и вывести эти слова
не могу сообразить как написать цикл, в котором он выделяет слова, и потом выделяет из этих слов...

6
anmartex
...
1787 / 1255 / 931
Регистрация: 12.02.2013
Сообщений: 2,056
28.05.2013, 08:02 2
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>
 
int main()
{
   const char CDelim[] = "\n\t ,.!?";
   char text[256] = {'\0'};
   printf("text: ");
   fgets(text, sizeof(text) - 1, stdin);
 
   int len;
   int i, j;
   bool unique;
 
   char* pstr = strtok(text, CDelim);
   while (pstr)
   {
      len = strlen(pstr);
      unique = true;
      for (i = 0; (i < len - 1) && unique; ++i)
      {
         for (j = i + 1; (j < len) && unique; ++j)
         {
            unique = (pstr[i] != pstr[j]);
         }
      }
 
      if (unique)
      {
         printf("- %s\n", pstr);
      }
 
      pstr = strtok(NULL, CDelim);
   }
 
   system("pause");
 
   return EXIT_SUCCESS;
}
Вывести те слова, в которых все символы разные
1
easybudda
Модератор
Эксперт JavaЭксперт CЭксперт С++
10510 / 6215 / 1562
Регистрация: 25.07.2009
Сообщений: 11,834
28.05.2013, 11:25 3
Лучший ответ Сообщение было отмечено как решение

Решение

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <stdio.h>
#include <string.h>
 
int unique(const char * s) {
    return ( *s ) ? ( strchr(s + 1, *s) ) ? 0 : unique(s + 1) : 1;
}
 
#define DELIM " \t\n"
 
int main(void) {
    char buf[BUFSIZ], * p;
    
    while ( printf("String: ") && fgets(buf, BUFSIZ, stdin) && *buf != '\n' )
        for ( p = strtok(buf, DELIM); p; p = strtok(NULL, DELIM) )
            if ( unique(p) )
                printf("%s\n", p);
    
    return 0;
}
3
Thinker
Эксперт С++
4239 / 2213 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
28.05.2013, 13:02 4
easybudda, красиво! жаль, что сложность алгоритма O(n^2). Ваши алгоритмы иногда наталкивают на интересные мысли, спасибо
2
easybudda
Модератор
Эксперт JavaЭксперт CЭксперт С++
10510 / 6215 / 1562
Регистрация: 25.07.2009
Сообщений: 11,834
28.05.2013, 15:23 5
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Не по теме:

Цитата Сообщение от Thinker Посмотреть сообщение
сложность алгоритма O(n^2)
К стыду своему, я с этими определениями сложности так до полного просветления и не дошёл...



Рекурсивные функции даже даже без учёта сложности алгоритма всё равно будут проигрывать по скорости итерационным аналогам, за то они короткие и по-своему красивые... Можно было бы намудрить что-то вроде
C
1
2
3
4
5
6
7
8
9
10
11
12
/*...*/
unsiged char COUNTERS[UCHAR_MAX + 1];
int unique(const char * s) {
    return ( *s == '\0' ) ? 1 : ( COUNTERS[(unsigned char)(*s)]++ ) ? 0 : unique(s + 1);
}
 
int main(void) {
    /*...*/
    memset(COUNTERS, 0, UCHAR_MAX + 1);
    printf("%s", ( unique(some_tested_string) ) ? "YES" : "NO");
    /*...*/
}
Но согласитесь - как-то уже не то немного...
2
Thinker
Эксперт С++
4239 / 2213 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
28.05.2013, 16:31 6
Цитата Сообщение от easybudda Посмотреть сообщение
Но согласитесь - как-то уже не то немного...
зато сейчас сложность алгоритма O(n) и сделать быстрее уже нельзя я бы так сделал, чтобы до конца строки не идти, если повтор встретится:

C
1
2
3
int unique(const char * s) {
    return ( *s == '\0' ) ? 1 : ++COUNTERS[(unsigned char)(*s)] < 2 && unique(s + 1);
}
1
SmashBrain
0 / 0 / 0
Регистрация: 09.04.2013
Сообщений: 30
28.05.2013, 17:22  [ТС] 7
всем спасибо ...виручили
0
28.05.2013, 17:22
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.05.2013, 17:22

Вывести на экран все слова, в которых имеется максимальное количество различных букв
Дана последовательность символов, состоящая из слов. Вывести на экран все слова, в которых имеется...

Создать текст. Вывести на экран все слова, в которых есть двойные буквы
Создать текст. Вывести на экран все слова, у которых есть двойные буквы (класс, группа и...

Вывести все слова, в которых буква "а" стоит на втором месте
Программа должна вывести все слова (Слова должны быть написаны латинскими буквами) в которых буква...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru