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

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

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

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

09.09.2012, 08:28. Просмотров 1664. Ответов 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
Форумчанин
Эксперт С++
4514 / 2856 / 228
Регистрация: 12.12.2009
Сообщений: 7,249
Записей в блоге: 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
1644 / 1272 / 133
Регистрация: 21.12.2010
Сообщений: 1,932
Записей в блоге: 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
1644 / 1272 / 133
Регистрация: 21.12.2010
Сообщений: 1,932
Записей в блоге: 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     Напечатать все различные слова, указав для каждого из них число его вхождений в последовательность
Ответ Создать тему
Опции темы

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