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

Количество повторяющихся слов - C++

Восстановить пароль Регистрация
 
hativuno
Сообщений: n/a
16.02.2014, 16:07     Количество повторяющихся слов #1
Всем доброго времени суток! Дано задание подсчитать количество слов в тексте и их длину, а также количество повторяющихся слов. Первые два пункта я сделать смог, а вот с третьим вышел затык.
Прошу помощи знатоков.
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
#include<stdio.h>
#include<conio.h>
#include<fstream>
#include<string>
#include<iostream>
 
using namespace std;
    //char string[1000];
    int i,s=0,z; int c[100], a[100];                  // s-kolichestvo slov, с-dlinna slova, a-temp
    int b[100]; int j;                                // j-schetchik, b-slova s odinakovim kol-vom simvolov
    ifstream ifs("C:\\test.txt"); 
 cin.getline(string, sizeof(string)); 
c[0]=0;                                               //iskluchaem oshibki(naverno)
z=strlen(string);
for (i=1;i<=z;i++)
    if ((string[i]==' ')||(string[i]=='\0'))           
     {s++; a[s]=i; };                                 //poschitali slova i # poslednego slova
 
cout <<"Number of words: "<< s<<endl; cout<<endl;
 
for (i=1; i<=s; i++ )                                 //kolichestvo simvolov v kajdom slove
    {if (i>1) {c[i]=a[i]-a[i-1]-1; cout<<"Word #"<<i<<" contain "<<c[i]<<" simbol(s)"<<endl;}
    else {c[i]=a[i]; cout<<"Word #"<<i<<" contain "<<c[i]<<" simbol(s)"<<endl;}}
 
//nu a teper sravnenie
//vot tut zatik u menya
    
 
for (i=0;i<=z;++i)
    {for (j=0;j<=z;++j)
{if (string[i]=string[j]) {cout<<"Est sovpadenie!"<<endl; cout<<" ci "<<c[i]<<" "<<string[i]<<" cj "<<c[j]<<" "<<string[j]<<endl;}}
    }*/
//cout<<endl;
_getch();
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.02.2014, 16:07     Количество повторяющихся слов
Посмотрите здесь:

C++ Удаление повторяющихся слов из стоки на C
C++ Удаление повторяющихся соседних слов из текста
C++ Строки - подсчитать максимально кол-во повторяющихся слов
Выявление повторяющихся слов! C++
C++ Запись всех повторяющихся слов в новый массив слов
Дан текст, найти количество слов и количество слов, у которых первый и последний символ совпадают C++
C++ Поиск повторяющихся слов
Как реализовать удаление повторяющихся слов? C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DiffEreD
 Аватар для DiffEreD
1420 / 757 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
16.02.2014, 17:18     Количество повторяющихся слов #2
hativuno, вряд ли кто то будет разбираться в твоем коде, но подобные задачи лучше решать с помощью SLT(map, set, algorithm и т. д.). Вот эдакое решение в голову пришло (код С++11):
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
#include <iostream>
#include <iomanip>
#include <iterator>
#include <fstream>
#include <string>
#include <algorithm>
#include <unordered_map>
#include <unordered_set>
#include <vector>
 
using input = std::istream_iterator<std::string>;
using Pair = std::pair<std::string, std::string::size_type>;
 
int main()
{
   std::fstream ifs("file.txt");
   if (!ifs.is_open())
   {
      std::cerr << "Error opening file!\n";
      return 1;
   }
 
   std::unordered_multimap<std::string, std::string::size_type> words;
   std::transform(input(ifs), input(), std::inserter(words, words.begin()),
                  [](const std::string& str){ return std::make_pair(str, str.size()); });
 
   std::cout << "Number of words: " << words.size() << "\n\n";
   std::cout << "Length of words:\n\n";
   for (auto& word : words) std::cout << std::setw(20) << std::left << word.first << word.second << "\n";
 
   std::vector<std::string> v;
   std::transform(words.begin(), words.end(), std::back_inserter(v),
                  [](const Pair& p){return p.first;});
   auto pos_of_unique = std::unique(v.begin(), v.end());
 
   std::unordered_set<std::string> s(pos_of_unique, v.end());
 
   std::cout << "\n\nAll repeating words: " << (std::distance(pos_of_unique, v.end()) + s.size()) << "\n";
 
   std::cout << "\nDone." << std::endl;
   return 0;
}
Yandex
Объявления
16.02.2014, 17:18     Количество повторяющихся слов
Ответ Создать тему
Опции темы

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