Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
mr_Eugene
0 / 0 / 0
Регистрация: 26.11.2012
Сообщений: 18
#1

Задание из Страуструпа

29.11.2013, 23:39. Просмотров 699. Ответов 11
Метки нет (Все метки)

Добрый день,дорогие форумчане.В общем читаю книжечку Страуструпа.Выполняю задания.Вот что-то у меня ступор.Прошу Вашего совета

"Задание:Напишите программу,которая подсчитывает количество повторов пар букв в строке типа string.Например, пара букв "ab" входит в строку "xabaacbaxabb" дважды"

Мой код:
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
#include "stdafx.h"
#include <iostream>
#include <string>
#include <locale>
#include <vector>
#include <string.h>
 
using namespace std;
 
int main()
{
    setlocale(LC_ALL, "Russian");
    string st1,st2,st3;
    vector<string> st,str;
    int amt = 0;
    st1 = "babacabacd";
    int sz = st1.size();
 
    for (int i = 0; i < sz - 1; i++)                //Записываем все комбинации букв
    {
        st2 = st1[i];
        st2 += st1[i + 1];
        st.push_back(st2);               
        amt++;
        st2 = "";
    }
   int fix=0;                                       //Счетчик
 
   for(int i = 0;i<st.size();i++)
   {
       for (int j=0;j<st.size();i++)
         {
           if (strcmp(st[i].c_str(),st[j].c_str())) //Сравниваем элементы
              fix++;                                //Фиксируем в счетчике.Должна быть всегда хотя бы одна комбинация.
         }
    cout<<st[i]<<""<<fix;                           //Выводим пару букв и их количество повторений.
    fix=0;
   }
    system("pause");
    return 0;
}
Компилятор крашится и выдает ошибку стандартной библиотеки - Out of Range вот здесь вот:
C++
1
if (strcmp(st[i].c_str(),st[j].c_str()))
Не очень понимаю,как тогда сравнить 2 строки

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.11.2013, 23:39
Ответы с готовыми решениями:

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

Угадайка от Страуструпа
Писал, писал, устал. В логике ошибок нет. Как алгоритм оптимизировать и...

Калькулятор Страуструпа С++
Я новичок в С++, пытаюсь читать Страуструпа. Дошёл до строчного калькулятора и...

калькулятор страуструпа
Всем привет, читаю книгу Страуструпа. Вроде все понимаю, циклы, условия if,...

Калькулятор Страуструпа
Вот код калькулятора, помогите исправить 2 вещи: 1) Когда в командной строке...

11
Vensus
42 / 24 / 15
Регистрация: 29.11.2013
Сообщений: 74
29.11.2013, 23:45 #2
функция strcmp - сравнивает строки (два одномерных массива типа char) и возвращает 0 (!) если строки равны, так что как минимум вам надо было написать if(!strcmp(...)), что такое c_str() я не знаю, поэтому тут ручаться ни за что не буду...
0
mr_Eugene
0 / 0 / 0
Регистрация: 26.11.2012
Сообщений: 18
30.11.2013, 08:31  [ТС] #3
Цитата Сообщение от Vensus Посмотреть сообщение
функция strcmp - сравнивает строки (два одномерных массива типа char) и возвращает 0 (!) если строки равны, так что как минимум вам надо было написать if(!strcmp(...)), что такое c_str() я не знаю, поэтому тут ручаться ни за что не буду...
Поправилспасибо,но все-равно та же ошибка.
c_str() возвращает const* char как раз то,что нужно для функции strcmp()

Добавлено через 8 часов 8 минут
Ошибку))нашел,тему можно закрытьВместо j++ в цикле написал i++ ,мда
0
rrrFer
Заблокирован
30.11.2013, 09:32 #4
Мне кажется или я не видел более извращенного решения?

ты берешь строку и формируешь с нее вектор пар, а потом ищешь в этом векторе. Невероятная хренотень.
Твоя программа сожрет, как минимум, в 3 раза больше памяти и работать будет тоже не быстро. Ищи другое решение, если решаешь задачу для саморазвития, а не для препода ))

Код
strcmp(st[i].c_str(),st[j].c_str())
зачем ты используешь strcmp? - неужели st[i] != st[j] не сработало?

Мелких ляпов тут тоже много, на самое главное, ужасный алгоритм ))
0
mr_Eugene
0 / 0 / 0
Регистрация: 26.11.2012
Сообщений: 18
30.11.2013, 21:43  [ТС] #5
Цитата Сообщение от rrrFer Посмотреть сообщение
Мне кажется или я не видел более извращенного решения?

ты берешь строку и формируешь с нее вектор пар, а потом ищешь в этом векторе. Невероятная хренотень.
Твоя программа сожрет, как минимум, в 3 раза больше памяти и работать будет тоже не быстро. Ищи другое решение, если решаешь задачу для саморазвития, а не для препода ))

Код
strcmp(st[i].c_str(),st[j].c_str())
зачем ты используешь strcmp? - неужели st[i] != st[j] не сработало?

Мелких ляпов тут тоже много, на самое главное, ужасный алгоритм ))
Да это я уже от отчаяния начал использовать,а так изначально st[i]==st[j] былоКасательно вектора,просто "захотелось" сделать с ним)А так конечно подумаю над другим решением))Спасибо за яркий коммент
0
XRuZzz
Антикодер
1491 / 651 / 36
Регистрация: 15.09.2012
Сообщений: 2,650
30.11.2013, 21:48 #6
это задание из книги "The C++ Programming Language" 4-ое издание?
0
mr_Eugene
0 / 0 / 0
Регистрация: 26.11.2012
Сообщений: 18
30.11.2013, 21:50  [ТС] #7
Цитата Сообщение от XRuZzz Посмотреть сообщение
это задание из книги "The C++ Programming Language" 4-ое издание?
Да)
0
XRuZzz
Антикодер
1491 / 651 / 36
Регистрация: 15.09.2012
Сообщений: 2,650
30.11.2013, 21:52 #8
Цитата Сообщение от mr_Eugene Посмотреть сообщение
Да)
так её же нет в русском переводе.
0
mr_Eugene
0 / 0 / 0
Регистрация: 26.11.2012
Сообщений: 18
30.11.2013, 21:53  [ТС] #9
Цитата Сообщение от XRuZzz Посмотреть сообщение
так её же нет в русском переводе.
Если поглядывать 3ье издание на русском,вполне так все понятно)Однако у 3ого перевод не очень.Ну и задания конечно совпадают,но не все
0
XRuZzz
Антикодер
1491 / 651 / 36
Регистрация: 15.09.2012
Сообщений: 2,650
30.11.2013, 21:55 #10
Цитата Сообщение от mr_Eugene Посмотреть сообщение
Если поглядывать 3ье издание на русском,вполне так все понятно)
на какой странице эта задача в 4-ом издании?
0
mr_Eugene
0 / 0 / 0
Регистрация: 26.11.2012
Сообщений: 18
30.11.2013, 22:00  [ТС] #11
Цитата Сообщение от XRuZzz Посмотреть сообщение
на какой странице эта задача в 4-ом издании?
Прошу прощения, перепутал, у меня, The С++ Programming Language Special 3rd Edition((страница 153
0
XRuZzz
Антикодер
1491 / 651 / 36
Регистрация: 15.09.2012
Сообщений: 2,650
30.11.2013, 22:14 #12
Цитата Сообщение от mr_Eugene Посмотреть сообщение
Прошу прощения, перепутал, у меня, The С++ Programming Language Special 3rd Edition((страница 153
а потом будете 4-ое перечитывать? ) я просто к тому, что эту задачку решать необъязательно.
у меня например есть репозиторий для разбора примеров из книги страуструпа(4-ого издания):
svn://axt.su/axt-stroustrup-the-cpp
поэтому я могу предоставить доступ на запись, бум вместе разбирать примеры, а к 3-ему изданию у меня интереса нету.
0
30.11.2013, 22:14
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.11.2013, 22:14

Калькулятор Страуструпа
Компилятор выдает ошибку: C2361 пропуск инициализации &quot;d&quot; из-за метки...

Калькулятор Страуструпа (C++)
Добрый вечер! Я изучаю &quot;Принципы и практика использования C++&quot; Страуструпа....

задачки Страуструпа
Сижу в обнимку с талмудом Страуструпа, изучаю С++ самостоятельно. Просить код...


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

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

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