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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Дария_
0 / 0 / 0
Регистрация: 28.09.2011
Сообщений: 7
#1

Найти все пары слов с наибольшим расстоянием. - C++

28.09.2011, 21:47. Просмотров 695. Ответов 3
Метки нет (Все метки)

Пусть у нас есть текстовый файл,на который не накладываются ограничения относительно его размера. Также не накладываются ограничения на длину строки в этом файле.
Текст состоит из слов,например,идентификаторы английского языка. Слова разделяются промежутками, скобками,кодами операций,вообще символами,которые естественным образом отделяют слова друг от друга. Пусть ограничение на длину слова составляет 30 букв.
В поле результата нужно вывести слова без повторений, которые удовлетворяют следующему условию:
Пусть расстояние между двумя словами - это количество позиций, которые отличаются буквами. Найти все пары слов с наибольшим расстоянием.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.09.2011, 21:47     Найти все пары слов с наибольшим расстоянием.
Посмотрите здесь:

Найти все пары слов - C++
Здравствуйте! Помогите пожалуйста с задачей... Найти в тексте все слова, встречающихся в одинаковых контекстах (между одних и тех же...

Имеется 15 строк, найти строку с наибольшим количеством слов палиндромов - C++
Заранее напишу полное задание: Больше всего меня волнуют слова палиндромы, с остальным надеюсь разобраться сам. Подскажите...

Установить соответствие между расстоянием в милях и расстоянием в киломтерах - C++
установить соответствие между расстоянием в милях и расстоянием в киломтерах для значений от 1 до 20 с шагом в 2 мили . 1 миля=1,609344...

Найти все пары близнецов - C++
Выдать все пары близнецов <n. Близнецы простые числа, разность между которыми =2

Найти все пары близнецов из отрезка - C++
Два простых числа - близнецы, если они отличаются на 2 (н.п. 41 и 43). Найти все пары близнецов из отрезка. Программу я написал, но есть...

Найти все пары дружественных чисел в диапазоне [n1, n2] - C++
Два натуральных числа называются дружественными, если каждое из них равно сумме простых делителей другого. Найти все пары дружественных...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alexcoder
1463 / 677 / 88
Регистрация: 03.06.2009
Сообщений: 3,550
Завершенные тесты: 1
29.09.2011, 08:17     Найти все пары слов с наибольшим расстоянием. #2
strtok в помощь
xAtom
914 / 739 / 60
Регистрация: 09.12.2010
Сообщений: 1,346
Записей в блоге: 1
29.09.2011, 16:55     Найти все пары слов с наибольшим расстоянием. #3
Дария_, на скорую руку накидал, попробуй как вариант а не решение данной задачи.
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
74
75
76
77
78
79
80
81
82
83
84
#include <fstream>
#include <iostream>
#include <set>
#include <string>
using namespace std;
#define SEPARATE  "\n\t,.:;!? +-/*\\\"'[](){}()\r "
 
struct scmp { 
    bool operator () (string s1, string s2) const{
        return s1.compare(s2) < 0;
   }
};
void tokenize(set<string, scmp>* coll, string str);
int  max_ch(const char* str1, const char* str2);
 
int  main(void) {
  set<string, scmp> swords;
  fstream  fp("D:\\words.txt", ios_base::in);
 
  if(! fp.is_open())
        exit(1);
 
  string str;
  while(! fp.eof()) {
       getline(fp, str, '\n');
       tokenize(&swords, str);
  }
  fp.close();
 
  // обработка с поиском схожести слов на символы
  int tmp, num;
  set<string, scmp>::iterator ptr, pos, oiter;
  set<string, scmp>::iterator iter = swords.begin();
  while(iter != swords.end()) {
       pos  = iter;
       oiter = iter;
       for(tmp = 0, ptr = ++iter; ptr != swords.end(); *ptr++) {
               num = max_ch(pos->c_str(), ptr->c_str());
               if(num > tmp) {
                  tmp = num;
                  oiter = ptr;
              }
       }
        if(tmp) { 
              cout.width(32);
              cout << pos->c_str() << "\t-" << tmp << "-\t" << oiter->c_str() << endl;
              *oiter = "";
              *pos   = "";
        }
  }
  swords.clear();
  system("pause");
  return 0;
}
 
// функция по разбивки строки на слова
void tokenize(set<string, scmp>* coll, string str) {
    string  sb;
    size_t  i = 0u;
    do {
          if(isalnum(str[i]) && i != str.length()) 
                 sb += str[i];
          else {
                if(sb.length() > 0u) 
                      coll->insert(sb);
                sb = "";
          }
     } while(++i <= str.length());
}
 
// подсчёт символов идентичности между словами
int  max_ch(const char* str1, const char* str2) {
  const char* str;
  int  len;
  for(len = 0; *str1; *str1++) {
          for(str = str2; *str; *str++) {
                if( *str == *str1 ) {
                       len++;
                       break;
                 }
           }
  }
  return len;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.10.2011, 22:16     Найти все пары слов с наибольшим расстоянием.
Еще ссылки по теме:

Найти все пары дружественных натуральных чисел из интервала от N 1 до N 2. - C++
Очень нужна помощь!) Помогите пожалуйста) в С++, visual studio учусь на первом курсе мех-мата: Найти все пары дружественных...

Найти в тексте все слова с наибольшим количеством гласных букв русского алфавита - C++
Дан текст. Найти в нем все слова с наибольшим количеством гласных букв русского алфавита. Кто может помочь с решением этой задачи?

Найти все пары натуральных дружественных чисел, меньших 50000 - C++
Два натуральных числа дружественными, если каждое из них равно сумме всех делителей другого (само другое число в качестве делителя не...

Найти все пары дружественных чисел в диапазоне от 200 до 300 - C++
Помогите пожалуйста с решением задачи в С++. Вот условие: используя оператор цикла for, решить задачу: Два натуральных числа...

Найти все пары дружественных чисел, не превосходящих заданного числа - C++
Два натуральных числа называются &quot;дружественными&quot;, если каждое из них равно сумме всех делителей другого, за исключением его самого...

Найти все пары «дружественных чисел», которые не больше данного числа/ на C++ - C++
Два натуральных числа называются «дружественными», если каждое из них равно сумме всех делителей (кроме его самого) другого (например,...


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

Или воспользуйтесь поиском по форуму:
Дария_
0 / 0 / 0
Регистрация: 28.09.2011
Сообщений: 7
05.10.2011, 22:16  [ТС]     Найти все пары слов с наибольшим расстоянием. #4
спасибо большое!
Yandex
Объявления
05.10.2011, 22:16     Найти все пары слов с наибольшим расстоянием.
Ответ Создать тему
Опции темы

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