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

Ошибка в роботе с контейнером: set iterator not incrementable - C++

Восстановить пароль Регистрация
 
triadec_96
 Аватар для triadec_96
11 / 11 / 0
Регистрация: 27.12.2012
Сообщений: 427
Завершенные тесты: 1
03.12.2013, 12:54     Ошибка в роботе с контейнером: set iterator not incrementable #1
Задание:Дано предложение.Какие большие и маленькие буквы с этих 'k','p','s','t','f','h','c' не содержатся в предложении.
Обязательным условием написания программы есть использование контейнера set.
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
#include <iostream>
#include <set>
#include <conio.h>
#include <string>
using namespace std;
void main()
{
    set<char> c;
    set<char>::iterator it;
    char a[14]={'k','p','s','t','f','h','c','K','P','S','T','F','H','C'};
    string str;
    getline(cin,str);//считую предложение
    int i;
    for(i=0,it=c.begin();i<sizeof(str);i++,it++)//забиваю его в сет
        c.insert(str[i]);
    bool l[14];//каждый l отвечает своей букве в массиве символов "а"
    for(it=c.begin();it!=c.end();it++)
        for(i=0;i<14;i++)
            if(*it==a[i]) l[i]=1;//проверка наличия символа в сете
    cout<<"Nemaye takyh liter:";
    for(i=0;i<14;i++)//вывод символов,которые отсутствуют
        if(l[i]==0) cout<<a[i]<<" ";
    getch();
}
Но после ввода предложения выбивает ошибку:set iterator not incrementable.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.12.2013, 12:54     Ошибка в роботе с контейнером: set iterator not incrementable
Посмотрите здесь:

C++ map/set iterator not dereferencable
std::sort(iterator, iterator, method) подскажите как исправить C++
C++ Ошибка: iterator not decrementable
C++ Ошибка при запуске программы "vector iterator not incrementable"
C++ Map/set iterator not dereferencable
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
03.12.2013, 12:59     Ошибка в роботе с контейнером: set iterator not incrementable #2
triadec_96, Зачем в первом цикле вообще используется переменная it?
triadec_96
 Аватар для triadec_96
11 / 11 / 0
Регистрация: 27.12.2012
Сообщений: 427
Завершенные тесты: 1
03.12.2013, 13:16  [ТС]     Ошибка в роботе с контейнером: set iterator not incrementable #3
Цитата Сообщение от ForEveR Посмотреть сообщение
Зачем в первом цикле вообще используется переменная it?
Понял.Спасибо)
Но теперь выбивает ошибку: string subscript out of range.
Но выбивает её только тогда,когда нету в предложении каких-то заданых букв.

Добавлено через 15 минут
Строки 14-15
C++
1
2
for(i=0;i<sizeof(str);i++)
        c.insert(str[i]);
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
03.12.2013, 13:20     Ошибка в роботе с контейнером: set iterator not incrementable #4
triadec_96, sizeof(str) это размер объекта string. Для кол-ва символов используйте str.size() или str.length().
triadec_96
 Аватар для triadec_96
11 / 11 / 0
Регистрация: 27.12.2012
Сообщений: 427
Завершенные тесты: 1
03.12.2013, 13:23  [ТС]     Ошибка в роботе с контейнером: set iterator not incrementable #5
Цитата Сообщение от ForEveR Посмотреть сообщение
triadec_96, sizeof(str) это размер объекта string. Для кол-ва символов используйте str.size() или str.length().
Спасибо.А какая разница между sizeof(str) и str.size().Они дают разные значения?
Теепрь 14-я строка имеет такой вид:
C++
1
for(i=0;i<str.size();i++)
Но когда ввожу "kp KP ",то в результате ничего не выводится.Типа все буквы есть в сете.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
03.12.2013, 14:01     Ошибка в роботе с контейнером: set iterator not incrementable #6
triadec_96, Да, они дают разные значения.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.12.2013, 16:43     Ошибка в роботе с контейнером: set iterator not incrementable
Еще ссылки по теме:

C++ Map/set iterator not dereferencable
Map/set!( iterator not dereferencable) C++
Vector iterator not incrementable C++

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

Или воспользуйтесь поиском по форуму:
Alex5
881 / 616 / 81
Регистрация: 12.04.2010
Сообщений: 1,546
03.12.2013, 16:43     Ошибка в роботе с контейнером: set iterator not incrementable #7
triadec_96, Из-за того, что массив l[] не инициализирован, там (с большой вероятностью) все элементы true. Так как любое ненулевое целое после приведения к типу bool даёт true.
Попробуйте написать
C++
1
bool l[14] = { false };//каждый l отвечает своей букве в массиве символов "а"
Yandex
Объявления
03.12.2013, 16:43     Ошибка в роботе с контейнером: set iterator not incrementable
Ответ Создать тему
Опции темы

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