#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();
}
Идентичные подстроки в строке (С++)
Найти в тексте повторяемые слова и вывести их на экран.
Разделение текста на слова и проверка нахождения найденых слов в исходной строке зделана:
Код:
Проблема заключяется в реализации редактирования исходного текста, тобиш удаления уже найденных слов, или же исключением уже выведенных слов из проверки вообще, дабы не выводить их повторно.
Буду благодарен за любую помощь.:)
Так почему бы не загнать слова в список, не отсортировать их, и не применить алгоритм unique()
STL конечно медленный, но задача, я так понимаю, академическая и скорость не важна...
Цитата: fanto
В скобках стоят плюсы....
Так почему бы не загнать слова в список, не отсортировать их, и не применить алгоритм unique()
STL конечно медленный, но задача, я так понимаю, академическая и скорость не важна...
Так почему бы не загнать слова в список, не отсортировать их, и не применить алгоритм unique()
STL конечно медленный, но задача, я так понимаю, академическая и скорость не важна...
Как я уже говорил проблема заключяется в самой реализации. До этого я работал Pascal/Delphi. Если там наплевать на память и скорость то задача сводится до поиска в масиве, сдесь же реализация подобного вызывает у меня затруднения.
Смотри книгу Стэнли Липпмана Язык программирования .Вводный курс.(где ее скачать - смотри Полезные ссылки раздела Студентам) Там подробно рассказано как решаются подобные задачи.страницы 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;
}
#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;
}
За литературу большое спасибо, думаю книга поможет разобраться в С.
А на щёт кода.. он Visual написан? Просто Borland его не воспринял. Всё равно спс буду переводить под себя.