Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
0 / 0 / 0
Регистрация: 28.09.2011
Сообщений: 7
1

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

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

Пусть у нас есть текстовый файл,на который не накладываются ограничения относительно его размера. Также не накладываются ограничения на длину строки в этом файле.
Текст состоит из слов,например,идентификаторы английского языка. Слова разделяются промежутками, скобками,кодами операций,вообще символами,которые естественным образом отделяют слова друг от друга. Пусть ограничение на длину слова составляет 30 букв.
В поле результата нужно вывести слова без повторений, которые удовлетворяют следующему условию:
Пусть расстояние между двумя словами - это количество позиций, которые отличаются буквами. Найти все пары слов с наибольшим расстоянием.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.09.2011, 21:47
Ответы с готовыми решениями:

С клавиатуры вводится заданное количество слов. Найти все пары слов, одно из которых оканчивается на то же сочетание
С клавиатуры вводится заданное количество слов. Найти все пары слов, одно из которых оканчивается...

Вывести на экран все пары городов с расстоянием менее 100 км между ними
Помогите пожалуйста с решение задачи на массивы. неужто сложно напечатать задания руками? а...

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

В тексте найти все пары слов, из которых одно является обращением другого
Ребята, эта последняя задача помогите решить мне ну очень нужно)) В тексте найти все пары слов, из...

3
1768 / 746 / 153
Регистрация: 03.06.2009
Сообщений: 5,209
29.09.2011, 08:17 2
strtok в помощь
0
930 / 755 / 299
Регистрация: 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;
}
1
0 / 0 / 0
Регистрация: 28.09.2011
Сообщений: 7
05.10.2011, 22:16  [ТС] 4
спасибо большое!
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.10.2011, 22:16

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

В тексте найти все пары слов, из которых одно является обращением другого
Здравствуйте. Моя задача уже почти решена import java.io.PrintWriter; import java.util.Arrays;...

В тексте найти все пары слов, из которых одно является обращением другого
Задачка такая: В тексте найти все пары слов, из которых одно является обращением другого. т.е. ...

В тексте найти все пары слов, из которых одно является обращением другого (консольное приложение)
Только начинаю изучать яву, преподаватель дал решить задачу в короткие сроки. Вроде простая задача:...

Найти в тексте все пары слов, каждое из которых можно получить перестановкой букв второго слова
дан русский текст.Найти в тексте все пары слов ,каждое из которых можно получить перестановкой букв...

Задан массив русских слов. Напечатать все пары слов, образующих рифму
Задан массив русских слов. Напечатать все пары слов, образующих рифму Напишите пожалуйста...

В заданном словаре найти все пары слов (анаграммы), при чтении каждого из которых в обратном порядке образуется другое
Dev cpp язык Си!


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

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