Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Задачи по C/С++

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
На первую страницук этому сообщениюк последнему сообщению

Открыть новую тему     Написать ответ в эту тему

derelict



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору


Код:
 
#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;
}
 


Всего записей: 232 | Зарегистр. 11-06-2006 | Отправлено: 23:20 25-11-2009
Открыть новую тему     Написать ответ в эту тему

На первую страницук этому сообщениюк последнему сообщению

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Задачи по C/С++


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru