#include <iostream> #include <stdio.h> using namespace std; int main() { // Массив, который содержит информацию о том, сколько раз каждый символ встречается в слове // 26 = количество букв латинского алфавита short int chars[26] = {0}; // Входная строка char str[257] = {'\0'}; char c; int pos = 0; int len = 0; int count = 0; bool flag; // Выводим на консоль приглашение и считываем введенную пользователем строку cout<<"String: "; cin.getline(str, 255); cout<<"Result"<<endl; // Определяем количество символов в строке len = strlen(str); // Добавляем в конец строки пробел (для упрощения дальнейшего анализа) str[len + 1] = '\0'; str[len] = ' '; len++; // Проходим по всем символам строки for(int i = 0; i < len; i++) { // Если текущий символ - пробел if(str[i] == ' ') { // Переменная flag равна true, если в слове нет повторяющихся букв flag = true; // Проходим по массиву chars и смотрим, сколько раз встретилась каждая буква в слове for(int j = 0; j < 26; j++) { // Если буква встретилась больше 1 раза - заканчиваем проверку, слово не подходит if(chars[j] > 1) { flag = false; break; } } // Если слово подошло if(flag) { // Увеличиваем количество найденных слов count++; // Выводим все символы строки от предыдущего пробела до текущего, то есть текущее слово for(int j = pos; j < i; j++) { cout<<str[j]; } cout<<endl; } // Обнуляем массив chars for(int j = 0; j < 26; j++) { chars[j] = 0; } // Обновляем позицию пробела pos = i + 1; } else { // Если символ не пробел, переводим его в нижний регистр c = tolower(str[i]); // Если это буква латинского алфавита - увеличиваем соответствующий элемент массива chars на единицу if(c >= 'a' && c <= 'z') { chars[c - 'a']++; } } } // Если ни одно слово не подошло - выводим сообщение, что требуемые слова не найдены if(count == 0) { cout<<"No words"<<endl; } getchar(); return 0; } |