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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.56
Van111
кодер с++
208 / 187 / 4
Регистрация: 03.08.2011
Сообщений: 2,597
Записей в блоге: 12
#1

пример из книги страуструпа - C++

01.11.2011, 10:18. Просмотров 1219. Ответов 13
Метки нет (Все метки)

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
struct pair {
           char* name;  // ñòðîêГ*
           int val;     // öåëîå
        };
 
         const int large = 1024;
         static pair vec[large+1];
 
         pair* find(const char* p)
         {
         int i=0;
         for ( i=0; vec[i].name; i++)
             if (strcmp(p,vec[i].name)==0) return &vec[i];
 
         if (i == large) return &vec[large-1];
 
         return &vec[i];
       }
 
       int& value(const char* p)
       {
         pair* res = find(p);
         if (res->name == 0) {  // äî Г±ГЁГµ ïîð ñòðîêГ* Г*ГҐ âñòðå÷Г*Г«Г*Г±Гј,
                                // Г§Г*Г*Г·ГЁГІ Г*Г*äî ГЁГ*èöèГ*ëèçèðîâГ*ГІГј
           res->name = new char[strlen(p)+1];
           strcpy(res->name,p);
           res->val = 0;      // Г*Г*Г·Г*ëüГ*îå Г§Г*Г*Г·ГҐГ*ГЁГҐ Г°Г*ГўГ*Г® 0
        }
        return res->val;
      }
       const int MAX = 256;    // áîëüøå äëèГ*Г» Г±Г*ìîãî äëèГ*Г*îãî ñëîâГ*
 
       main()
       // ïîäñ÷èòûâГ*ГҐГІ Г·Г*ñòîòó ñëîâ ГўГ® âõîäГ*îì ïîòîêå
      {
        char buf[MAX];
 
        while (cin>>buf) value(buf)++; // !!!!!!!!!!!!!!!!!!
 
        for (int i=0; vec[i].name; i++)
            cout << vec[i].name << ": " << vec [i].val<< '\n';
       }
 Комментарий модератора 
Используй теги форматирования кода!

пример не работает . прога долна же вырубатся при нажатие интера
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.11.2011, 10:18
Здравствуйте! Я подобрал для вас темы с ответами на вопрос пример из книги страуструпа (C++):

Задачка из книги Страуструпа... - C++
Доброго времени суток всем! Заранее благодарен за ответы и, возможные, пути исправления... Итак: &quot;Считайте последовательности чисел...

Задачка из книги Страуструпа - C++
Здравствуйте могли бы вы мне помочь в решении задачи. Вот собственно само условие. Условие: Теперь измените тело цикла так, чтобы он...

Достаточно ли книги Страуструпа? - C++
В общем, учу с++ по страуструпу и думаю: &quot; а хватит ли этого???&quot; . Подскажите книгу, по которой учиться дальше? Спасибо!

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

Задача из книги Страуструпа (4.6.3) - C++
Читаю книгу Страуструпа не могу понять как сортировать функцией sort. пример взят и переписан их книги: &quot;Принципы и практика...

Задание из книги Страуструпа - C++
Здравствуйте! Я решил начать изучать программирование, конкретнее - язык C++. Самым логичным способом изучения мне показалось попробовать...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
-=ЮрА=-
01.11.2011, 10:55
  #2

Не по теме:

Van111, что вообще должен делать алгоритм - бить строку на подстроки?Не охота править чужую логику если можно реализовать всё намного эффективней...

Van111
кодер с++
208 / 187 / 4
Регистрация: 03.08.2011
Сообщений: 2,597
Записей в блоге: 12
01.11.2011, 11:01  [ТС] #3
-=ЮрА=-,
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Van111, что вообще должен делать алгоритм - бить строку на подстроки
да эт всё ерунда мне не это интересно а вот это
C++
1
 while (cin>>buf) value(buf)++; // !!!!!!!!!!!!!!!!!!
вроде ввел пустую строку и она вырубится должна а не фига ,вырубается только как нажмёшь контрол зет и интер
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
01.11.2011, 11:02 #4
Van111, Как бэ логично. Надо послать сигнал EOF.
Van111
кодер с++
208 / 187 / 4
Регистрация: 03.08.2011
Сообщений: 2,597
Записей в блоге: 12
01.11.2011, 11:12  [ТС] #5
ForEveR, а что у EOF и контрол зет код в аски одинаковый
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
01.11.2011, 11:14 #6
Van111, CTRL + Z для винды, CTRL + D для линукса посылаю сигнал EOF.
-=ЮрА=-
Заблокирован
Автор FAQ
01.11.2011, 11:28 #7
Van111,
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
int main()
// ïîäñ÷èòûâГ*ГҐГІ Г·Г*ñòîòó ñëîâ ГўГ® âõîäГ*îì ïîòîêå
{
    char buf[MAX];
    do
    {
        cin>>buf;
        cin.ignore();
        value(buf)++; // !!!!!!!!!!!!!!!!!!
    }
    while(getchar() != '\n');
 
    for (int i=0; vec[i].name; i++)
        cout << vec[i].name << ": " << vec [i].val<< '\n';
    return 0;
}
- нажмёте Enter 2 раза и выйдете из цикла...
Миниатюры
пример из книги страуструпа  
-=ЮрА=-
Заблокирован
Автор FAQ
01.11.2011, 12:04 #8
Van111, вот как я вижу это задание на плюсах
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
#include <iostream>
#include <string>
using namespace std;
using std::string;
 
int main()
{
    long i,j,cnt,nWords = 0;
    string text[256];//Г¬Г*Г±Г±ГЁГў ñëîâ
    char chr;
    cout<<"\tEnter words\n";
    while((chr = getchar()) != '\n' && nWords < 256)
    {
        //Ââîä ñëîâГ*
        getline(cin,text[nWords]);
        //ïðèñòûêîâûâГ*ГҐГ¬ chr ГўГ*Г*Г·Г*ëî ñòðîêè
        text[nWords] = chr + text[nWords];
        nWords++;
    }
    //Èùåì ñëîâГ* Гў ГІГҐГЄГ±ГІГҐ
    for(i = 0; i < nWords; i++)
    {
        cnt = 1;//ГЇГ®Г*ГїГІГ*îå äåëî Г·ГІГ® ñëîâî
        //ГЁГ§ text õîòÿ ГЎГ» 1 Г°Г*Г§ ГҐГ±ГІГј Гў ГІГҐГЄГ±ГІГҐ
        for(j = 0; j < nWords; j++)
        {
            if(i != j)
            if(!text[i].empty())
            if(text[i] == text[j])
            {
                //ÂûòåðГ*ГҐГ¬ ñîâïГ*Г¤Г*ГѕГ№ГҐГҐ Г± text[i] ñëîâî
                text[j].erase(0,text[j].length());
                cnt++;//Óâåëè÷èâГ*ГҐГ¬ Г±Г·ВёГІГ·ГЁГЄ ñëîâ
            }
        }
        //Âûòåðòûå Г*Г*ìè ñòðîêè ГЁГЈГ*îðèðóåì
        if(!text[i].empty())
            cout<<text[i]<<" : "<<cnt<<"\n";
    }
    system("pause");
    return 0;
}
PS:Для выхода из цикла ввода жмём Enter 2 раза
Миниатюры
пример из книги страуструпа  
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
01.11.2011, 14:25 #9
-=ЮрА=-, Ну мапу бы уже тогда использовал если string юзаешь.

Добавлено через 3 минуты
C++
1
2
3
4
5
6
7
8
9
10
std::map<std::string, int> dict;
std::string str;
while (std::cin >> str) 
{
   ++dict[str];
}
std::for_each(dict.begin(), dict.end(), [](const std::pair<const std::string, const int>& pr) 
{
   std::cout << pr.first << " - " << pr.second << std::endl;
});
Deviaphan
Делаю внезапно и красиво
Эксперт C++
1286 / 1220 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
01.11.2011, 16:00 #10

Не по теме:

Как же мне лямбды нравятся.)


А вместо "const std:air<const std::string, const int>& pr" const auto & pr можно?
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
01.11.2011, 16:03 #11
Deviaphan, Не должно бы. Ща проверю.
Нет.
Van111
кодер с++
208 / 187 / 4
Регистрация: 03.08.2011
Сообщений: 2,597
Записей в блоге: 12
01.11.2011, 16:05  [ТС] #12
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Van111, вот как я вижу это задание на плюсах
это не моё решение , а решение создателя языка с++

Добавлено через 15 секунд
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Van111, вот как я вижу это задание на плюсах
это не моё решение , а решение создателя языка с++
Deviaphan
Делаю внезапно и красиво
Эксперт C++
1286 / 1220 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
01.11.2011, 16:11 #13
Цитата Сообщение от ForEveR Посмотреть сообщение
Нет.
Жаль.( Тип статически известен, мог бы и вывести.(

Добавлено через 3 минуты
Аааааа:
template-argument cannot be a type that contains 'auto'
Жаль. Было бы ещё круче. И фэйлить проще было бы.
-=ЮрА=-
Заблокирован
Автор FAQ
01.11.2011, 16:49 #14
Цитата Сообщение от ForEveR Посмотреть сообщение
Ну мапу бы уже тогда использовал если string юзаешь.
- я ж под ТС-а всегда делаю(верней под его уровень) - но идея красивая, Вам от меня заслуженный +

Добавлено через 3 минуты

Не по теме:

Цитата Сообщение от ForEveR Посмотреть сообщение
while (std::cin >> str)
- правда вот только это на старье не идёт getline(cin подъюзывать надо, это я на заметку ТС-у...

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.11.2011, 16:49
Привет! Вот еще темы с ответами:

Задача из книги Страуструпа - C++
Меня настораживает несколько странная формулировка, я не понимаю зачем так предлагают решать задачу: Напишите программу, содержащую цикл...

Объяснить код из книги Страуструпа - C++
Здравствуйте форумчане, помогите пожалуйста со строуструповским калькулятором. В книге он определяет тип Token для хранения лексем: ...

Библиотеки для книги Страуструпа - C++
Доброго времени суток! Дядя Бьярне использует библиотеки в своей книге &quot;Принципы и практика использования С++&quot;, которых нет в компиляторах....

Упражнение №8 глава 5 из книги Страуструпа - C++
Здравствуйте. Помогите решить задание. Напишите программу,считывающую ряд чисел и записывающую их в vector&lt;int&gt;.После того как...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
01.11.2011, 16:49
Ответ Создать тему
Опции темы

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