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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 16, средняя оценка - 4.75
Maskca
1 / 0 / 0
Регистрация: 15.12.2008
Сообщений: 97
#1

Найти одинаковые слова - C++

06.11.2009, 17:32. Просмотров 2130. Ответов 8
Метки нет (Все метки)

Помогите написать програмку: дано две строковые переменные в них по несколько слов разделенных пробелами, как найти одинаковые слова из первой и второй переменной, тоисть это слово есть и в первой и во второй переменной?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.11.2009, 17:32     Найти одинаковые слова
Посмотрите здесь:

C++ Найти одинаковые 5-тисимвольные слова и подсчитать число их повторений
Удалить из строки одинаковые слова. C++
Удалить одинаковые слова предложения, идущие подряд C++
В строках найти одинаковые по размеру слова и переставить их из одной строки в другую C++
Удалить из текста одинаковые слова C++
C++ Дано предложение. В нем только два слова одинаковые. Найти эти слова
C++ Найти в тексте одинаковые слова и подсчитать число их повторений
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
outoftime
║XLR8║
506 / 428 / 33
Регистрация: 25.07.2009
Сообщений: 2,297
06.11.2009, 18:19     Найти одинаковые слова #2
запихай все слова в
мап типа
C++
1
map<string, int> M;
а потом ищи которых слов 2:
C++
1
2
for (map<string, int> :: iterator it = M.begin(); it != M.end(); ++it)
     if (it->second == 2) std::cout << it->first << endl;
Maskca
1 / 0 / 0
Регистрация: 15.12.2008
Сообщений: 97
06.11.2009, 18:34  [ТС]     Найти одинаковые слова #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
#include <iostream.h>
#include <string.h>
 
int main()
{
  
  
  char string[500];
  char string2[500];
  cout << "Type some string please: "; 
  cin.getline(string,sizeof(string));
  char *bufferWord = strtok(string," ");
 
  cout << "Type some string2 please: ";
  cin.getline(string2,sizeof(string2));
  char *bufferWord2= strtok(string2," ");
 
   while(bufferWord){
     if (bufferWord==bufferWord2) {cout<<"Слова совпали"<<endl;}
     bufferWord = strtok(NULL," ");
     bufferWord2 = strtok(NULL," ");
                     }
     
     return 0;
}
Но ничего не выходит
outoftime
║XLR8║
506 / 428 / 33
Регистрация: 25.07.2009
Сообщений: 2,297
06.11.2009, 19:14     Найти одинаковые слова #4
ты пишешь на си или на си++? на си++ в сто раз проще... или по крайней мере меньше писать))
Maskca
1 / 0 / 0
Регистрация: 15.12.2008
Сообщений: 97
06.11.2009, 20:33  [ТС]     Найти одинаковые слова #5
На с++
outoftime
║XLR8║
506 / 428 / 33
Регистрация: 25.07.2009
Сообщений: 2,297
06.11.2009, 20:39     Найти одинаковые слова #6
http://msdn.microsoft.com/en-us/library/bb385954.aspx
прочти мапы, я немного отвлекусь, скоро буду..
Андрейка
419 / 223 / 27
Регистрация: 25.03.2009
Сообщений: 744
06.11.2009, 20:59     Найти одинаковые слова #7
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <string>
#include <vector>
int main()
{
    setlocale(LC_ALL,"RUSSIAN");
    std::vector<std::string>a(10);
    std::vector<std::string>b(10);
    std::cout<<"заполните первую строку"<<std::endl;
    for (std::vector<std::string>::iterator it = a.begin() ; it!=a.end() ; ++it)
        std::cin>>*it;
    std::cout<<"заполните вторую строку"<<std::endl;
    for (std::vector<std::string>::iterator it2 = b.begin() ; it2!=b.end() ; ++it2)
        std::cin>>*it2;
    for (std::vector<std::string>::iterator it = a.begin() ; it!=a.end() ; ++it)
       for (std::vector<std::string>::iterator it2 = b.begin() ; it2!=b.end() ; ++it2)
           if (*it==*it2) std::cout<<*it<<' ';
    return 0;
}
outoftime
║XLR8║
506 / 428 / 33
Регистрация: 25.07.2009
Сообщений: 2,297
06.11.2009, 21:42     Найти одинаковые слова #8
Цитата Сообщение от Андрейка Посмотреть сообщение
жуть
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <string>
#include <vector>
int main()
{
    setlocale(LC_ALL,"RUSSIAN");
    std::vector<std::string>a(10);
    std::vector<std::string>b(10);
    std::cout<<"заполните первую строку"<<std::endl;
    for (std::vector<std::string>::iterator it = a.begin() ; it!=a.end() ; ++it)
        std::cin>>*it;
    std::cout<<"заполните вторую строку"<<std::endl;
    for (std::vector<std::string>::iterator it2 = b.begin() ; it2!=b.end() ; ++it2)
        std::cin>>*it2;
    for (std::vector<std::string>::iterator it = a.begin() ; it!=a.end() ; ++it)
       for (std::vector<std::string>::iterator it2 = b.begin() ; it2!=b.end() ; ++it2)
           if (*it==*it2) std::cout<<*it<<' ';
    return 0;
}
Я полагаю, что в даном случае можно было писать по понятней, и просто подключить пространство имен using namespace std; и не писать std:: сто раз, новичек и самом легком может запутаться..

Добавлено через 21 минуту
ход решения: переводим 2 заданые строки в вектор строк (для каждой свой вектор что-бы исключить ситуацию, когда одно предложение имеет одинаковые слова типа: "и тот, и этот", где "и" - слово) , потом можно сравнивать элементы 1-ого и 2-ого вектора.
пример:
C++
1
2
3
4
5
6
//инициализация вектора:
vector<string> s;        //в общем виде это: vector<тип>название(переменная)
//доступ к эдементам вектора как и к элементам масива: 
s[i] = "некая строка"; //при этом i-я строка вектора будет иметь значение "некая строка" (без кавычек)
//сравнение строк:
if (s[i] != s[j]) ...       //здесь s[i] - i-я строка вектора s
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.11.2009, 21:45     Найти одинаковые слова
Еще ссылки по теме:

C++ Вывести слова в строке ДО слова, у которого одинаковые первая и последняя буквы
C++ Удалить из текста одинаковые слова
Удалить одинаковые слова из текстового файла C++
C++ Найти в тексте слова, содержащие две одинаковые буквы, стоящие рядом
C++ Удалить одинаковые слова из заданного текста

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

Или воспользуйтесь поиском по форуму:
Rififi
2336 / 1051 / 44
Регистрация: 03.05.2009
Сообщений: 2,656
06.11.2009, 21:45     Найти одинаковые слова #9
Maskca,
Помогите написать програмку: дано две строковые переменные в них по несколько слов разделенных пробелами, как найти одинаковые слова из первой и второй переменной, тоисть это слово есть и в первой и во второй переменной?

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
#include <algorithm>
#include <set>
#include <string>
#include <sstream>
#include <iostream>
#include <iterator>
#include <locale>
 
typedef std::set<std::string> Z;
 
Z split(const Z::value_type& s)
{
    typedef std::istream_iterator<Z::value_type> I;
    std::stringstream ss(s);
    Z z;
    std::copy(I(ss), I(), std::inserter(z, z.begin()));
    return z;
}
 
template <typename C1, typename C2, typename _OutIt>
void in_common(const C1& c1, const C2& c2, _OutIt out)
{
    std::set_intersection(c1.begin(), c1.end(), c2.begin(), c2.end(), out);
}
 
int main()
{
    setlocale(LC_ALL, "");
    const std::string s1 = "aa bb cc dd aa bb";
    const std::string s2 = "ee ff aa xx bb ff";
 
    const Z z1 = split(s1);
    const Z z2 = split(s2);
 
    std::cout << "Общие слова: ";
    typedef std::ostream_iterator<Z::value_type> O;
    in_common(z1, z2, O(std::cout, " "));
    std::cout << std::endl;
 
    std::cin.get();
 
    return 0;
}
Вывод:
Общие слова: aa bb
http://codepad.org/bzLShffX
Yandex
Объявления
06.11.2009, 21:45     Найти одинаковые слова
Ответ Создать тему
Опции темы

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