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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.92
user_p01
19 / 19 / 2
Регистрация: 03.11.2011
Сообщений: 80
#1

Напечатать все различные слова, указав для каждого из них число его вхождений в последовательность - C++

09.09.2012, 08:28. Просмотров 1518. Ответов 6
Метки нет (Все метки)

Помогите пожалуйста решить задачу:
Дана последовательность, содержащая несколько слов, разделенных пробелами, за последним словом - точка. Напечатать все различные слова, указав для каждого из них число его вхождений в последовательность.
Например, стол компьютер яблоко компьютер стол шкаф.
стол - 2
компьютер - 2
яблоко - 1
шкаф - 1
Желательно не использовать класс string.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.09.2012, 08:28     Напечатать все различные слова, указав для каждого из них число его вхождений в последовательность
Посмотрите здесь:

C++ Напечатать все слова, отличные от последнего слова, предварительно преобразовав каждое из них по заданному правилу
Напечатать все слова, которые отличаются от последнего, но предварительно надо уничтожить из них все последующие вхождения первой буквы C++
Дано предложение. Напечатать все различные слова C++
Дана последовательность слов.Напечатать все слова, отличные от слова «по» C++
Для каждого символа исходной строки найти число вхождений его в строке C++
Найти в тексте все различные слова и число их вхождений C++
Для каждого из слов предложения вывести количество его вхождений C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Kastaneda
Форумчанин
Эксперт С++
 Аватар для Kastaneda
4253 / 2785 / 219
Регистрация: 12.12.2009
Сообщений: 7,109
Записей в блоге: 1
Завершенные тесты: 1
09.09.2012, 09:14     Напечатать все различные слова, указав для каждого из них число его вхождений в последовательность #2
Цитата Сообщение от user_p01 Посмотреть сообщение
Желательно не использовать класс string.
желательно - это же не обязательно?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
#include <map>
 
int main()
{
    std::string buf;
    std::map<std::string, int> wordMap;
 
    std::cout << "Enter words: ";
 
    while (std::cin >> buf && std::cin.peek() != '\n')
    {
        wordMap[buf]++;
    }
 
    for (std::map<std::string, int>::iterator i = wordMap.begin(); i != wordMap.end(); i++)
    {
        std::cout << i->first << ": " << i->second << std::endl;
    }
 
    return 0;
}
igorrr37
 Аватар для igorrr37
1600 / 1228 / 121
Регистрация: 21.12.2010
Сообщений: 1,875
Записей в блоге: 7
09.09.2012, 10:29     Напечатать все различные слова, указав для каждого из них число его вхождений в последовательность #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>
#include <cstring>
#include <map>
 
bool Comp(char const* a, char const* b)
{
    return std::strcmp(a, b) < 0;
}
 
int main ()
{
    char s[]  = "table  computer apple  computer table box.", * pDelims = (char*)" .";
    std::map<const char*, std::size_t, bool (*)(char const*, char const*)> map(Comp);
    for(char * p = std::strtok(s, pDelims); p; p = std::strtok(0, pDelims))
    {
        ++map[p];
    }
    for(std::map<char const*, std::size_t, bool(*)(char const*, char const*)>::const_iterator it = map.begin(), itEnd = map.end(); it != itEnd; ++it)
    {
        std::cout << it->first << " - " << it->second << '\n';
    }
    std::cin.sync();
    std::cin.get();
    return 0;
}
user_p01
19 / 19 / 2
Регистрация: 03.11.2011
Сообщений: 80
16.09.2012, 15:23  [ТС]     Напечатать все различные слова, указав для каждого из них число его вхождений в последовательность #4
Подскажите пожалуйста, как решить эту же задачу, не используя контейнер map, векторы и указатели, т. е. только пользуясь стандартными функциями и объектами класса string.

Добавлено через 6 часов 34 минуты
Нужна помощь.

Добавлено через 1 час 10 минут
Нашел код на паскале. Помогите перевести на С++:
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
uses crt;
var s,s1:string;
    c:char;
    a:array[1..100] of string;
    b:array[1..100] of byte;
    n,i,j:byte;
    f:boolean;
begin
clrscr;
writeln('Введите слова, разделенные запятыми, в конце точка:');
s:='';
repeat
c:=readkey;
write(c);
s:=s+c;
if c='.' then writeln;
until c='.';
s[length(s)]:=',';
n:=1;
a[n]:=copy(s,1,pos(',',s)-1);
b[n]:=1;
delete(s,1,pos(',',s));
while pos(',',s)>0 do
 begin
  s1:=copy(s,1,pos(',',s)-1);
  f:=false;
  j:=1;
  while(j<=n)and not f do
  if a[j]=s1 then
   begin
    f:=true;
    b[j]:=b[j]+1;
   end
  else j:=j+1;
  if not f then
   begin
    n:=n+1;
    a[n]:=s1;
    b[n]:=1;
   end;
  delete(s,1,pos(',',s));
 end;
writeln('Разные слова:');
for i:=1 to n do
writeln(a[i],' ',b[i],' рз.');
readln
end.
igorrr37
 Аватар для igorrr37
1600 / 1228 / 121
Регистрация: 21.12.2010
Сообщений: 1,875
Записей в блоге: 7
16.09.2012, 16:33     Напечатать все различные слова, указав для каждого из них число его вхождений в последовательность #5
на string
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
#include <iostream>
#include <string>
 
int main()
{
    std::string s("  a table  computer apple  computer table a tablespoon.  "), word, tmp;
    std::string::size_type ind(0), ind1(0), ind2, counter(0);
    for(ind = 0; (ind = s.find('.', ind)) != std::string::npos; s.replace(ind, 1, 1, ' '))
    ;
    while((ind = s.find_first_not_of(' ', 0)) != std::string::npos &&
          (ind1 = s.find(' ', ind)) != std::string::npos)
        {
            word.assign(s, ind, ind1 - ind);
            s.erase(ind, ind1 - ind);
            for(counter = 1, ind =  0;
                (ind = s.find_first_not_of(' ', ind)) != std::string::npos &&
                (ind1 = s.find(' ', ind)) != std::string::npos; )
            {
                if(s.substr(ind, ind1 - ind) == word)
                {
                    ++counter;
                    s.erase(ind, ind1 - ind);
                }
                else
                {
                    ind = ind1;
                }
            }
            std::cout << word << " - " << counter << std::endl;
        }
    return 0;
}
IrineK
Заблокирован
16.09.2012, 16:50     Напечатать все различные слова, указав для каждого из них число его вхождений в последовательность #6
Когнитивный диссонанс:
user_p01 пост первый:
...не использовать класс string.
user_p01 пост последний:
...только пользуясь стандартными функциями и объектами класса string
И как же нам быть? Со стрингами или без?)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.09.2012, 17:19     Напечатать все различные слова, указав для каждого из них число его вхождений в последовательность
Еще ссылки по теме:

Для каждого элемента определить число вхождений в данную последовательность C++
C++ Для заданного слова определить среднее арифметическое его вхождений в предложения документа
C++ Дано предложение. Напечатать все его различные слова
C++ Дана строка, вывести различные слова и число их вхождений
Напечатать все слова последовательности, предварительно преобразовав каждое из них по следующему правилу C++

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

Или воспользуйтесь поиском по форуму:
user_p01
19 / 19 / 2
Регистрация: 03.11.2011
Сообщений: 80
16.09.2012, 17:19  [ТС]     Напечатать все различные слова, указав для каждого из них число его вхождений в последовательность #7
igorrr37, Спасибо большое!
Цитата Сообщение от IrineK Посмотреть сообщение
И как же нам быть? Со стрингами или без?)
Со стрингами. Просто я понял, что С-строками (тип char) пользоваться неудобно.
Yandex
Объявления
16.09.2012, 17:19     Напечатать все различные слова, указав для каждого из них число его вхождений в последовательность
Ответ Создать тему
Опции темы

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