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

Найти наибольшее общее слово - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Вычислите площадь круга, если известен его радиус http://www.cyberforum.ru/cpp-beginners/thread822118.html
Здравствуйте. Помогите, пожалуйста, написать программу: Вычислите площадь круга, если известен его радиус. Программа должна быть написана с использованием классов. Заранее спасибо.
C++ написать и протестировать функцию которая по заданному натуральному числу определяет количество цифр в нем и их сумму если есть желание пожалуйста напишите подробно.... сильно слаб в этом http://www.cyberforum.ru/cpp-beginners/thread822108.html
C++ Чтение из файла
Не могу найти ссылки на чтение из файла в стиле C и C++. Дайте пожалуйста ссылки на вашем форуме!
ПРоблема со значениями массива C++
Пишу программу, в ней есть массив, значения которого задаются рандомно от 1 до 9. Когда вызывается функция, определяющая среднее значение, то сумма этих значений всегда равна -858992948. Помогите найти ошибку #include<iostream> #include<stdlib.h> #include<time.h> using namespace std; void srednee (const int , int); //void mediana (const int , int); //void moda (const int , int , int);...
C++ Для каждого массива определить номер столбца с наибольшим количеством положительных элементов. http://www.cyberforum.ru/cpp-beginners/thread822073.html
Использование функций, возвращающих одно значение. Даны целочисленные массивы A, B. Для каждого массива определить номер столбца с наибольшим количеством положительных элементов. Добавлено через 15 минут #include <iostream> #include <conio.h> #include <stdlib.h> int main() { int i, j;
C++ Перегрузка = Прошу помощи! Нужно запихать эту функцию в перегрузку = Вот функция void CopyString(const char* src, char* dst) //копирование строки { while(*dst++ = *src++); } Вот метод перегрузки, где используется эта функция подробнее

Показать сообщение отдельно
IrineK
Заблокирован
30.03.2013, 14:55     Найти наибольшее общее слово
fscanf - считывает что-угодно до пробела. Если это слово - в формате указываем "%s"

Добавлено через 25 минут
Алгоритм такой:
1. Создаем файл word1.dat из уникальных слов текста file1.dat, для чего:
1) достаем слово из файла;
2) чистим его от "налипших" точек-запятых;
3) приводим к прописным буквам (tolower);
4) проверяем ,есть ли оно уже в word1.dat, если нет - записываем.
2. Аналогично создаем word2.dat
3. Находим общие слова в word1.dat и word2.dat. Записываем их в common.dat
4. Проходим по common.dat, находим самое длинное слово, любуемся на него на консоли )

Добавлено через 21 час 54 минуты
Если в плюсах, тогда так:

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
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
//Two files of texts are given. Find the longest common word which both of them contain.
 
#include <iostream>
#include <fstream>
using namespace std;
 
//--------------------------------------------------------------------------------------
//function checks if the given character is a delimiter
//returns 1 if it is, 0 - if not
//--------------------------------------------------------------------------------------
int isDelimiter(char c)
{   int i=0;
    char delimiters [] = {' ','.',',','-',':',';','!','?',
                        '(',')','{','}','[',']','<','>','\'','"'};
    while(delimiters[i])
        if(c == delimiters[i++])
            return 1;
    return 0;
}
 
//--------------------------------------------------------------------------------------
//procedure creates list of unique words found in the given file
//the list is kept in another file
//--------------------------------------------------------------------------------------
void listOfWords(fstream &fText, const char *fWordsName)
{   char word[50], compare[50];
    int i, cur, onlyDelims, isIn;
    fstream fWords;
    
    fWords.open (fWordsName, fstream::in|fstream::out|fstream::trunc);
    if(!fWords)
    {   cout<<"Error creating file for words\n";
        cin.get();
        exit(1);
    }
 
    while(fText)
    {   fText>>word;
 
        cur = 0;    i=0;    onlyDelims = 0;
        while(word[cur] && isDelimiter(word[cur]))
            cur++;
        if (cur == strlen(word))
            onlyDelims = 1; //the whole word of delimiters, to be ignored
    
    if(!onlyDelims)
      { //peel from left
         while (word[i+cur])
            word[i++] = word[i+cur];
        word[i] = '\0';
        
        //peel from right
        i = strlen(word)-1;
        while(i>-1 && isDelimiter(word[i]) )
            word[i--] = '\0';
        
        //tolower
        i = 0;
        while (word[i])
            word[i++] = tolower(word[i]);
 
        //word processed -> is unique?
        isIn = 0;
        fWords.seekg(0,fWords.beg);
        while(fWords)
        {   fWords>>compare;
            if(strcmp(compare,word)==0)
            {   isIn = 1;
                break;
            }
        }
        fWords.clear(); //cleaning eof()
        
        //word processed and unique-> out
        if(!isIn)
        {   fWords.seekp(0,fWords.end);
            fWords<<word<<"\n";
        }
      }//if
    }//while
    fWords.close();
}
 
//--------------------------------------------------------------------------------------
//procedure finds common words in the two given files with lists of words
//the list of common words is kept in another file
//--------------------------------------------------------------------------------------
void findCommons(const char *fW1Name, const char *fW2Name, const char *fCommonName)
{   fstream fCommon, fW1, fW2;
    
    fCommon.open (fCommonName, fstream::out|fstream::trunc);
    fW1.open (fW1Name, fstream::in);
    fW2.open (fW2Name, fstream::in);
 
    if(!(fCommon && fW1 && fW2))
    {   cout<<"Error processing files for common words\n";
        cin.get();
        exit(1);
    }
 
    char word1[50], word2[50];
 
    while(fW1)
    {   fW1>>word1;
        fW2.seekg(0,fW2.beg);
        while(fW2)
        {   fW2>>word2;
            if(strcmp(word1,word2)==0)
                fCommon<<word1<<"\n";
        }
        fW2.clear();
    }
 
    fCommon.close();
    fW1.close();
    fW2.close();
}
 
//--------------------------------------------------------------------------------------
//function returns the longest word in the given file with 
//list of words
//--------------------------------------------------------------------------------------
char *findTheLongestWord(const char *fName)
{   fstream f;
    f.open(fName, fstream::in);
 
    if(!f)
    {   cout<<"Error opening file\n";
        cin.get();
        exit(1);
    }
 
    char word[50], res[50];
    unsigned int max = 0;
    while(f)
    {   f>>word;
        if(strlen(word)>max)
        {   max = strlen(word);
            strcpy(res,word);
        }
    }
    f.close();
 
    char *back = new char[strlen(res)];
    strcpy(back,res);
    return back;
}
 
//--------------------------------------------------------------------------------------
//MAIN
//--------------------------------------------------------------------------------------
int main()
{   fstream f1,f2;
    f1.open ("file1.dat", fstream::in);
    f2.open ("file2.dat", fstream::in);
    
    if( !(f1 && f2))
    {   cout<<"Error opening files with texts\n";
        cin.get();
        exit(1);
    }
 
    listOfWords(f1,"word1.dat");
    listOfWords(f2,"word2.dat");
    f1.close();
    f2.close();
 
    findCommons("word1.dat", "word2.dat", "common.dat");
    cout<< "The longest word found in the both files: "<<findTheLongestWord("common.dat");
    
    cin.get();
    return 0;
}
Здесь решены многие стандартные подзадачи, часто встречающиеся при обработке строк/слов, а также при работе с файловыми потоками.

P.S. Файлы file1.dat и file2.dat создайте заранее )
 
Текущее время: 17:57. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru