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

Непонятная ошибка при работе с vector - C++

Восстановить пароль Регистрация
 
Ybr
 Аватар для Ybr
1 / 1 / 0
Регистрация: 05.11.2009
Сообщений: 17
20.12.2009, 19:08     Непонятная ошибка при работе с vector #1
Здравствуйте!
Что делает программа: Определить, сколько раз в заданном предложении встречаются 3 одинаковых символа подряд (учитываем, что это могут быть 2 разных символа).

Замечание: комментарии писал чисто для себя, не задумывался об их понятности. Поэтому если возникают вопросы - задавайте.

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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#include "stdafx.h"
#include "windows.h"
#include "stdio.h"
#include <conio.h>
#include "vector"
#include <string>
#include <iostream>
#include "locale"
#include <fstream>
 
using namespace std;
 
int main()
{
    setlocale(LC_ALL,"Russian");
 
    ifstream Input;//поток на ввод
    ofstream Output;//поток на вывод
    string s1;//заданная строка
    vector <char> M1;//содержит буквы, создающие искомые комбинации
    vector <int> M2;//содержит количество раз, которые встречаются эти комбинации
 
    Input.open("C:\\Users\\Михаил\\Desktop\\ДРП\\Lab10Help\\Input.txt");
    Output.open("C:\\Users\\Михаил\\Desktop\\ДРП\\Lab10Help\\Output.txt");
    getline(Input,s1);
 
    char buf2=s1.at(0), buf1=' ',buf3=' ';//buf2 - текущий символ, buf1 - предыдущий, buf3 - следующий
    char buf;
    unsigned short int i=0,j=0;//счетчики
    unsigned short int k=0;//считает 3 одинаковых символа
    unsigned short int z=0;//считает, скольок раз эта комбинация встретилась в предложении
    bool flag=true;
 
    for (i = 0 ; i < s1.length()-1 ; i++)
    {
                //находим 3 следующих подряд одинаковых символа
        buf2 = s1.at(i); buf3 = s1.at(i+1);
        if (buf2 == buf1 && buf2 == buf3) k++;//Если и предыдущий, и следующий символы равны текущему (buf2)
        buf1 = s1.at(i);
 
        if (M1.empty() && k == 1) M1.at(0) = buf2; else[/COLOR]//Если M1 пуст и найдена искомая комбинация, то можно задать начальное значение для M1
        {
            if (k == 1)
            {
                for (j = 1 ; j < M1.max_size() ; j++)//определяем, встречался ли уже такой buf
                {
                    buf = M1.at(j);
                    if (buf == buf2) flag = false;
                }
 
                if (flag)//если да - добавляем новую букву в M1 и количество ее обнаружений (1) - в M2
                {
                    M1.push_back(buf2);
                    M2.push_back(1);
                }
                else M2.at(j) = M2.at(j) + 1;//если нет - то увеличиваем количество обнаружений в M2 соответствующего buf на 1
            }
        }
    }
    
    _getch();
    return 0;
}
Проблема появилась в строке if (M1.empty() && k == 1) M1.at(0) = buf2; else. Выдается ошибка:
Необработанное исключение типа "System.Runtime.InteropServices.SEHException" произошло в Lab10Help.exe

Дополнительные сведения: Внешний компонент создал исключение.
То ли ему не нравится сравнение в if (), то ли присваивание, следующее за if.

И вдогонку вопрос, не относящийся к теме сообщения: чем отличается объявление заголовочных файлов при использовании "" и <> ? Т.е. чем отличается #include <conio.h> от #include "conio.h" ?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
outoftime
║XLR8║
 Аватар для outoftime
505 / 427 / 33
Регистрация: 25.07.2009
Сообщений: 2,297
20.12.2009, 19:39     Непонятная ошибка при работе с vector #2
Цитата Сообщение от Ybr Посмотреть сообщение
И вдогонку вопрос, не относящийся к теме сообщения: чем отличается объявление заголовочных файлов при использовании "" и <> ? Т.е. чем отличается #include <conio.h> от #include "conio.h" ?
в первом случае хедер файл ищется в директории по умолчанию со всеми заголовками а во втором в папке с сорсом

Добавлено через 48 секунд
Цитата Сообщение от Ybr Посмотреть сообщение
[/COLOR]
что это?
Андрейка
408 / 212 / 22
Регистрация: 25.03.2009
Сообщений: 712
20.12.2009, 19:48     Непонятная ошибка при работе с vector #3
outoftime, color это тэг который попал случайно в код )
Nick Alte
Эксперт С++
1590 / 982 / 115
Регистрация: 27.09.2009
Сообщений: 1,897
Завершенные тесты: 1
20.12.2009, 21:22     Непонятная ошибка при работе с vector #4
Налицо явный случай неумения пользоваться vector вообще и at в частности. Функция at обращается к существующему элементу, а если ей дать неверный индекс, бросает исключение. Соответственно, в пустом векторе (что гарантируется условием) функция at ВСЕГДА будет бросаться исключениями. В данном случае следовало бы написать M1.push_back(buf).
Ну и остальную программу переделать.
Yandex
Объявления
20.12.2009, 21:22     Непонятная ошибка при работе с vector
Ответ Создать тему
Опции темы

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