Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

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

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

Найти в тексте все различные слова и число их вхождений - C++
Нужна помощь. Дана последовательность, содержащая от 1 до 30 слов, в каждом из которых от 1 до 5 строчных латинских букв; между...

Дано предложение. Напечатать все его различные слова - C++
Дано предложение. Напечатать все его различные слова.

Для каждого элемента определить число вхождений в данную последовательность - C++
Помогите пожалуйста!!! в С++ Даны натуральное число N и последовательность A1, A2, …,A N. Для каждого элемента определить число вхождений в...

Для каждого символа исходной строки найти число вхождений его в строке - C++
Для каждого символа исходной строки найти число вхождений его в строке и напечатать в столбец(символ, частота вхождения) Почему-то...

Дана строка, вывести различные слова и число их вхождений - C++
Помогите,пожалуйста. Нашел код рабочей программы,но тут очень много непонятного для меня,нужно написать использую string,iostream,cctype ...

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

6
Kastaneda
Jesus loves me
Эксперт С++
4728 / 2932 / 242
Регистрация: 12.12.2009
Сообщений: 7,442
Записей в блоге: 2
Завершенные тесты: 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;
}
1
igorrr37
1712 / 1340 / 162
Регистрация: 21.12.2010
Сообщений: 2,052
Записей в блоге: 10
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;
}
1
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.
0
igorrr37
1712 / 1340 / 162
Регистрация: 21.12.2010
Сообщений: 2,052
Записей в блоге: 10
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;
}
1
IrineK
Заблокирован
16.09.2012, 16:50 #6
Когнитивный диссонанс:
user_p01 пост первый:
...не использовать класс string.
user_p01 пост последний:
...только пользуясь стандартными функциями и объектами класса string
И как же нам быть? Со стрингами или без?)
0
user_p01
19 / 19 / 2
Регистрация: 03.11.2011
Сообщений: 80
16.09.2012, 17:19  [ТС] #7
igorrr37, Спасибо большое!
Цитата Сообщение от IrineK Посмотреть сообщение
И как же нам быть? Со стрингами или без?)
Со стрингами. Просто я понял, что С-строками (тип char) пользоваться неудобно.
0
16.09.2012, 17:19
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.09.2012, 17:19
Привет! Вот еще темы с ответами:

Напечатать все слова, отличные от последнего слова строки, удалив из каждого слова первую и последнюю буквы - C++
Близиться сессия,а завтра мне сдавать 2 проги. Помогите ребят,могу даже 100 скинуть,если уж так трудно помочь. 8.Задан...

Дано предложение. Напечатать все различные слова - C++
Здравствуйте уважаемые форумчане. Дано предложение. Напечатать все различные слова... Как тут быть, какие идеи..?

Напечатать все слова, отличные от последнего слова, предварительно преобразовав каждое из них - C++
Дан текст, содержащий от 2 до 30 слов, в каждом из которых от 2 до 10 латинских букв; между соседними словами - не менее одного пробела....

Напечатать все слова, отличные от последнего слова, предварительно преобразовав каждое из них по заданному правилу - C++
Дан текст, содержащий от 2 до 30 слов, в каждом из которых от 2 до 10 латинских букв; между соседними словами - не менее одного пробела....


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

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