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

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

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

C++ Напечатать все слова, отличные от последнего слова, предварительно преобразовав каждое из них по заданному правилу
Напечатать все слова, которые отличаются от последнего, но предварительно надо уничтожить из них все последующие вхождения первой буквы C++
Дано предложение. Напечатать все различные слова C++
Дана последовательность слов.Напечатать все слова, отличные от слова «по» C++
Для каждого символа исходной строки найти число вхождений его в строке C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4237 / 2770 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 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
1594 / 1222 / 118
Регистрация: 21.12.2010
Сообщений: 1,868
Записей в блоге: 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
1594 / 1222 / 118
Регистрация: 21.12.2010
Сообщений: 1,868
Записей в блоге: 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++

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

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

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