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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Считать символы из файла в массив http://www.cyberforum.ru/cpp-beginners/thread77204.html
Пожалуйста. нужен код для реализации считывания символов из файла (.txt) в массив На С (и если не трудно, то и на С++) Спасибо
C++ Даны две символьные строки, состоящие только из цифр Подскажите пожалуйста! Borland C++ Даны две символьные строки, состоящие только из цифр (длина каждой - более 10 символов). Считая, что в этих строках находятся очень длинные целые числа, сформировать третью строку - сумму этих чисел. http://www.cyberforum.ru/cpp-beginners/thread77198.html
символы C++
Как записать в строку рандомные символы латинского алфавита (в С)?
Ошибка C++
1.INF00: что это ?! И как с этим бороться?!
C++ Как вызвать функцию, которая производит быструю сортировку http://www.cyberforum.ru/cpp-beginners/thread77181.html
Подскажите пожалуйста, как в С++ вызвать функцию, которая проводит быструю сортировку
C++ простые (или не очень)..... Всем доброго времени суток! Помогите пожалуйста решить вот такие вот задачки: 1) Записать положительные элементы массива X подряд в массив Y. Определить k-количество положительных элементов. Вычислить сумму элементов массива X и произведение элементов Y. 2) Календарь. (При решении задач принять во внимание, что в современном (григорианском) календаре каждый год, номер которого делится на 4,... подробнее

Показать сообщение отдельно
Ybr
1 / 1 / 0
Регистрация: 05.11.2009
Сообщений: 17

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

20.12.2009, 19:08. Просмотров 917. Ответов 3
Метки (Все метки)

Здравствуйте!
Что делает программа: Определить, сколько раз в заданном предложении встречаются 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" ?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 16:38. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru