Форум программистов, компьютерный форум CyberForum.ru

Подскажите написание начала - C++

Восстановить пароль Регистрация
 
vladislav5
0 / 0 / 0
Регистрация: 29.05.2011
Сообщений: 48
29.05.2011, 22:43     Подскажите написание начала #1
Имеется литерная последовательность, состоящая из не более чем 50
слов, в каждом из которых от 1 до 8 литер. Слова разделены одним
или несколькими знаками %
Сформировать из этой литерной последовательности другую литерную
последовательность всеми (сделать функции для каждого из
нижеследующих преобразований в отдельности) описанными ниже способами.
Преобразовывать нужно слова, отличные от последнего слова.
Преобразование заключается в переносе в выходную последовательность
слов, обладающих следующими свойствами:

* в слове нет повторяющихся литер
* каждая литера входит в слово не менее двух раз
* в слове гласные литеры чередуются с согласными
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.05.2011, 22:43     Подскажите написание начала
Посмотрите здесь:

C++ Классы в С++ (начала ООПиП)
Позиция начала строки в консоли... C++
начала разбираться с visual c++ 6.0 C++
Адрес начала строки C++
C++ Найти номер N дня с начала года
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
lemegeton
29.05.2011, 23:21
  #2

Не по теме:


предлагаю начать со ставших уже классическими строк:

C++
1
2
3
4
#include <iostream>
#include <string>
 
int main(int argc, char *argv[]) {

vladislav5
0 / 0 / 0
Регистрация: 29.05.2011
Сообщений: 48
30.05.2011, 13:27  [ТС]     Подскажите написание начала #3
да это смешно) первый цикл интересует)
lemegeton
 Аватар для lemegeton
2909 / 1338 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
31.05.2011, 00:11     Подскажите написание начала #4
Ну вот так можешь начать.
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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
#include <ctime>
#include <cstdlib>
#include <sstream>
#include <iterator>
#include <iostream>
#include <string>
#include <vector>
 
std::vector<std::string> split(std::string &string, char delimiter) {
  std::stringstream ss(string);
  std::vector<std::string> result;
  std::string token;
  while (std::getline(ss, token, delimiter)) {
    if (token != "")
      result.push_back(token);
  }
  return result;
}
 
template <class IteratorOne, class IteratorTwo,
          class Predicate, class OutputIterator>
void copy_if(IteratorOne begin, IteratorTwo end,
             Predicate predicate, OutputIterator output) {
  for(; begin != end; ++begin)
    if (predicate(*begin))
      *output++ = *begin;
}
 
struct Condition {
  std::string last_word;
  Condition(const std::string &last_word_) : last_word(last_word_) {}
  bool operator()(const std::string &word) {
    return (word != last_word &&
            (has_repeating(word) ||
             has_many(word) ||
             has_changing(word)));
  }
  bool has_repeating(const std::string &word) {
    // тут надо осуществить проверку на то, что
    // в слове нет повторяющихся литер
    return true;
  }
  bool has_many(const std::string &word) {
    // тут надо осуществить проверку на то, что
    // каждая литера входит в слово не менее двух раз
    return true;
  }
  bool has_changing(const std::string &word) {
    // тут надо осуществить проверку на то, что
    // в слове гласные литеры чередуются с согласными
    return true;
  }
};
 
int main(int argc, char *argv[]) {
  std::srand(std::time(NULL));
 
  std::string source, destination;
  for (int i = 45 + rand() % 10; i > 0; --i) {
    for (int j = 1 + rand() % 8; j > 0; --j)
      source += 'a' + rand() % ('f' - 'a' + 1);
    for (int j = 1 + rand() % 4; j > 0; --j)
      source += '%';
  }
  std::cout << source << std::endl;
 
  std::vector<std::string> words = split(source, '%');
 
  copy_if(words.begin(), words.end(), Condition(*(words.end() - 1)),
          std::ostream_iterator<std::string>(std::cout, " "));
 
  return 0;
}
Yandex
Объявления
31.05.2011, 00:11     Подскажите написание начала
Ответ Создать тему
Опции темы

Текущее время: 22:28. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru