Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Идентичные подстроки в строке (С++)

31K
28 ноября 2007 года
Iladan
7 / / 28.11.2007
Задано:
Найти в тексте повторяемые слова и вывести их на экран.
Разделение текста на слова и проверка нахождения найденых слов в исходной строке зделана:

Код:
#include <stdio.h>
#include <conio.h>
#include <string.h>
void main(void)
{ char  s[100],k[100],t[10]=" ,;.!?",*n,*m;
clrscr();
gets(s);
strcpy(k,s);
n=strtok(s,t);
while(n)
{
m=strstr(k,n);
if (m!=NULL)
{
puts(n);
}
n=strtok(NULL,t);
}
getch();
}


Проблема заключяется в реализации редактирования исходного текста, тобиш удаления уже найденных слов, или же исключением уже выведенных слов из проверки вообще, дабы не выводить их повторно.
Буду благодарен за любую помощь.:)
314
28 ноября 2007 года
fanto
374 / / 15.02.2003
В скобках стоят плюсы....
Так почему бы не загнать слова в список, не отсортировать их, и не применить алгоритм unique()
STL конечно медленный, но задача, я так понимаю, академическая и скорость не важна...
31K
28 ноября 2007 года
Iladan
7 / / 28.11.2007
Цитата: fanto
В скобках стоят плюсы....
Так почему бы не загнать слова в список, не отсортировать их, и не применить алгоритм unique()
STL конечно медленный, но задача, я так понимаю, академическая и скорость не важна...



Как я уже говорил проблема заключяется в самой реализации. До этого я работал Pascal/Delphi. Если там наплевать на память и скорость то задача сводится до поиска в масиве, сдесь же реализация подобного вызывает у меня затруднения.

320
28 ноября 2007 года
m_Valery
1.0K / / 08.01.2007
Вообще то уже делали не раз похожие задачи,так что поиском по форуму надо пользоваться.
Смотри книгу Стэнли Липпмана Язык программирования .Вводный курс.(где ее скачать - смотри Полезные ссылки раздела Студентам) Там подробно рассказано как решаются подобные задачи.страницы 259 - 290.Надо использовать STL.Или смотри Страуструпа.Он тоже решает похожий пример по составлению словаря.C использованием STL задача решается достаточно просто:вводим текст до тех пор пока не ввели символ ' 0 ' , подсчитываем сколько раз встречается каждое слово, выводим это на экран,выводим слова , встречающиеся более 1 раза.
Код:
#include <iostream>
#include <vector>
#include <map>
#include <string>
#include <algorithm>

using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
    std::wcout.imbue(locale(".866"));
    wcout<<L"Вводите текст"<<endl;
    string s;
    vector<string> vec;
    while(s != "0"){
                cin>>s;
       vec.push_back(s);
    }
    vec.erase(vec.end()-1);
    wcout<<L"Частота с какой встречаются слова"<<endl;
    vector<int> v;
    for(int i = 0;i<vec.size();++i){
      int count = 0;
      vector<string>::iterator it = find(vec.begin(),vec.end(),vec);
            for(vector<string>::iterator iter = vec.begin();
                 iter != vec.end();++iter){
                  if(*iter == *it) ++count;
      }
      v.push_back(count);
    }
    map<string,int> m_map;
    for(int i = 0;i<vec.size();++i){
       m_map.insert(map<string,int>::value_type(string(vec),int(v
                                   )));
    }
    for(map<string,int>::iterator iter = m_map.begin();iter !=  
                     m_map.end();++iter){
                 cout<<iter->first<<' '<<iter->second<<endl;
    }
    wcout<<L"Повторяющиеся слова"<<endl;
    for(map<string,int>::iterator iter = m_map.begin();iter !=  
                     m_map.end();++iter){
                         if(iter->second > 1)        
                            cout<<iter->first<<' '<<iter->second<<endl;
    }
    return 0;
}
31K
28 ноября 2007 года
Iladan
7 / / 28.11.2007
Поиск я использовал:) ,вот только настолько похожего чтоб разобраться не нашел. Наверно плохо искал.
За литературу большое спасибо, думаю книга поможет разобраться в С.
А на щёт кода.. он Visual написан? Просто Borland его не воспринял. Всё равно спс буду переводить под себя.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог