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

Segmentation fault (iterator) - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ классы http://www.cyberforum.ru/cpp-beginners/thread1058315.html
помогите не компилируется #include <iostream> #include <cstdlib> #include <vector> #include <map> // ��������� �������� typedef enum { S1, S2, S3 }
C++ Цикл отрицательного веса Помогите переделать решение, нашёл в интернете, но оно немного не подходит, а я никак не могу разобраться в коде и, следовательно, что-либо изменить. Можно обойтись без проверок, но очень помогли бы хоть какие-нибудь комментарии. Условие: Задан ориентированный граф, требуется определить, существует ли в нём цикл отрицательного веса. Использовать для этого метод Форда — Беллмана. Входные... http://www.cyberforum.ru/cpp-beginners/thread1058312.html
Вычислить площадь C++
Помогите. Вычислить площадь трех прямоугольных треугольников, заданных гипотенузой и катетом. Добавлено через 32 минуты 8-)
C++ классы
Не компилируется, помогите #include <iostream> #include <cstdlib> #include <vector> #include <map> // ��������� �������� typedef enum { S1, S2, S3
C++ Составить блок-схему http://www.cyberforum.ru/cpp-beginners/thread1058301.html
начертите блок схему по этому коду . пжлст #include <iostream> #include <vector> using namespace std; bool conectFile(){ if (!freopen ("input.txt", "r", stdin)){ fprintf (stderr, "File input.txt not found!");
C++ Как открыть программу через C++ Как открыть программу через C++ #include "stdafx.h"; #include <iostream> #include <string> #include <Windows.h> using namespace std; int main() { setlocale(LC_ALL, "Russian"); cout << "Нажмите Enter, чтобы открылась программа\n"; подробнее

Показать сообщение отдельно
gromo
370 / 269 / 24
Регистрация: 04.09.2009
Сообщений: 1,214

Segmentation fault (iterator) - C++

27.12.2013, 00:52. Просмотров 386. Ответов 7
Метки (Все метки)

И снова здравствуйте!
Кратко: функция некоторым образом парсит строку (не в этом проблема) и удаляет из нее НЕ алфавитно-цифровые символы.
Призываю не обдумывать возможные частные случаи, которые еще не предусмотрены в функции, ибо пока входная строка "подгоняется", чтобы регулярное выражение нашло то, что искало.
Прошу помощи ибо бесконечный цикл в 51 строке уморил основательно. Я так понял проблема с итератором mainIter
C++ (Qt)
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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
#include "app_headers/abstractconverter.h"
#include <iostream> // std::cerr
#include <boost/regex.hpp>
 
/*-> static <-*/ void AbstractConverter::filter_string(std::string &str) try {
    typedef std::string::iterator SIt_t;
    typedef std::string::const_iterator CSIt_t;
    typedef std::string::difference_type diff_t;
    bool withMinus;
    char* prevLocale = setlocale(LC_CTYPE, "C");
 
    // If the first non-whitespace character is '-'
    SIt_t mainIter = std::find_if_not(str.begin(), str.end(),
                                     [](char ch) -> bool {return isspace(ch);});
    // we consider, that the number is negative, otherwise - non negative.
    if(mainIter == str.end())
        throw prevLocale;
    if(*mainIter == '-')
    {
        withMinus = true;
        ++mainIter;
    }
    else withMinus = false;
 
    if(withMinus)
    {
        // Erase all unnecessary symbols between
        // '-' and first digit of the number.
        // This is requirement of GMP functions
        // mpf_set_str() and mpz_set_str().
        // See their documentation for details.
 
        // Find First Alpha-Numeric Symbol after minus.
        SIt_t fans = std::find_if(mainIter,
                                  str.end(),
                                  [](char ch) -> bool { return isalnum(ch); }
                                );
        if(fans == str.end())
            throw prevLocale;
        else str.erase(mainIter, fans);
    }
    // Here we at the position of the first meaning digit of the number.
 
    boost::regex reg(R"_([[:alnum:]]+\.[[:alnum:]]+)_", boost::regex_constants::extended);
    boost::smatch match;
    CSIt_t search_begin(mainIter);
 
    if ( boost::regex_search(search_begin, str.cend(), match, reg) )
    {
        diff_t capture_pos = match.position();
        for( ; mainIter != mainIter + capture_pos; ++mainIter)
            if(!isalnum(*mainIter))
                *mainIter = ' ';
        mainIter += match.length();
    }
 
 
    // Replace all unnecessary symbols in the number with spaces ' ';
    // If in the number presented multiple dots ('.'), only first dot
    // is accepted, while others replaced with spaces.
    // GMP funcs mpf_set_str() and mpz_set_str() are ignore spaces.
 
    for( ; mainIter != str.end(); ++mainIter)
        if(!isalnum(*mainIter))
            *mainIter = ' ';
 
    setlocale(LC_CTYPE, prevLocale);
}
 
catch (char* prevLoc)
{
    str.assign("0");
    std::cerr << "AbstractConverter::filter_string(std::string&): Exception: "
                 "No valid digits in the number\n";
    setlocale(LC_CTYPE, prevLoc);
    return;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 21:34. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru