Задача: Разнобуквица. Из имеющегося словаря выбрать наиболее длинное слово, в котором все буквы разные, например: ЛЕЙКОПЛАСТЫРЬ, НЕРЯШЛИВОСТЬ, ЧЕТЫРЁХДЮЙМОВКА.
Тесты:
Словарь | Результат | Комментарий |
There, here, the, then | then | Пройден |
Список 2500 наиболее употребительных английских слов | background | Пройден |
Код:
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 |
#include <iostream> #include <string> using namespace std; int main() { string s, max; // Оригинал, копия, самое длинное слово int n = 0; //Счетчик размерности слова while (cin >> s) { while(!isalpha(s[0])) s.erase(0,1); // Строка не будет while(!isalpha(s[s.length()-1])) s.pop_back(); // просматривать знаки препинания и т.п. bool x = 1; //Создаем булеву переменную for (int i = 0; i < s.length(); i++) //Создаем 2 цикла для проверки на повторение for (int j = i+1; j < s.length(); j++)//каждой буквы в слове. if (s[i] == s[j]) { //Если одна из букв встречается больше одного раза x = 0; //в одном слове, присваиваем х значение "false" и break; // прерываем цикл проверки. } if(x && s.length() > n) { //Если же значение х "true", то присваиваем максимально n = s.length(); // длинное слово max. max = s; } } cout << max; //Выводим результат. return 0; } |
Для того что бы найти искомое слово создаем две строки, одна для ввода словаря, другая для результата. Создаем цикл [latex]while[/latex] . С помощью функции [latex]isalpha()[/latex] отсеиваем знаки препинания в словаре. Далее создаем булеву переменную [latex]x[/latex] и два цикла [latex]for[/latex] что бы проверить встречается ли буква в слове больше одного раза, если хоть одна буква повторяется, то присваиваем [latex]x[/latex] значение «false» и прерываем цикл [latex]for[/latex]. Если значение булевой переменной «true», значит в слове нет повторяющихся букв, из таких слов теперь можно искать самое длинное, для этого счетчику [latex]n[/latex] присваиваем размерность самого длинного слово, и присваиваем его значение в строку [latex]max[/latex]. Выводим результат.
Зачтено для string c-string нужен ещё один код. Можно в этом же отчёте.
Но есть что сказать:
— Вы путаете размер и размерность. Какое из этих значений слова «размерность» Вы имеете в виду? Слово всегда одномерно (линейно). Хотя… Вы натолкнули меня на интересную мысль с плоскими или объёмными словами. Пожалуй мы изобретём матричную письменность 🙂
— Удалять не буквы в начале и конце слов совсем не обязательно. Мы ведь пользуемся готовым словарём. Там такого не должно быть.
— В булевские переменные можно класть 0 или 1, но лучше пользоваться false и true.
— Текст у Вас и в отчёте и в комментариях полон странных парадоксов. Например, «строка не будет просматривать…». Конечно не будет. Как она может что-то просматривать? А это — «создаем булеву переменную и два цикла» мне напоминает «шёл снег и два милиционера». Честно говоря, мне нравится. Можно не исправлять.