Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
FanOfGun
6 / 6 / 1
Регистрация: 13.10.2012
Сообщений: 101
#1

[Code::Blocks 12.11] непонятное зацикливание - C++

18.07.2013, 13:24. Просмотров 554. Ответов 8
Метки нет (Все метки)

main.cpp:
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
#include <string>
#include <Expresion.h>
 
using namespace std;
 
int main()
{
    Expresion expr("test+2");
    cout << /*expr.eval()*/"hello" << endl;
    return 0;
}
Expresion.h:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#ifndef EXPRESION_H
#define EXPRESION_H
#include <string>
using namespace std;
 
class Expresion
{
    public:
        Expresion(string expr);
        virtual ~Expresion();
        string eval();
    protected:
    private:
        string expr;
 
        string replaceall(string str, string find, string repl);
        void prepare();
        string getOp(int pos,int n);
};
 
#endif // EXPRESION_H
Expresion.cpp:
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
#include "Expresion.h"
#include <string>
 
using namespace std;
 
Expresion::Expresion(string expr)
{
    this->expr=expr;
    prepare();
}
 
Expresion::~Expresion()
{
    //dtor
}
 
void Expresion::prepare(){
    string delims="+-/*()";
    for (unsigned i=0;i<delims.length();i++)
        expr=replaceall(expr,delims.substr(i,1)," "+delims.substr(i,1)+" ");
}
 
string Expresion::replaceall(string str,string srch,string repl){
    unsigned p=0;
    while((p=str.find(srch))!=string::npos)
        str=str.replace(p,srch.length(),repl);
    return str;
}
 
string Expresion::eval(){
    return expr;
}
 
string Expresion::getOp(int pos,int n){
    return "";
}
Когда Expresion expr("test+2"); закоментированно, все нормально и предсказуемо, но стоит ее раскоментировать -- программа зацикливается, при нажатии на Break debugger выдает:
Код
Trying to pause the running process...
Program received signal SIGTRAP, Trace/breakpoint trap.
In ntdll!LdrFindResource_U () (C:\Windows\system32\ntdll.dll)
что я делаю не так? Заранее благодарен.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.07.2013, 13:24
Здравствуйте! Я подобрал для вас темы с ответами на вопрос [Code::Blocks 12.11] непонятное зацикливание (C++):

Code::blocks и VS - C++
всем привет, у меня такой вопрос: какой в Code::blocks аналог для #include stdafx.h? Нужно запустить, операции использую для этой...

MS VS in CODE BLOCKS - C++
Делал проекты в VISUAL C++ EXPRESS. Сеичас пересел на LINUX, пользуюсь CODE BLOCKS . Есть какие-нибудь варианты как открыть проекты...

Code::Blocks - C++
Здравствуйте. Я в английском не силён, и разобраться самостоятельно с этой IDE не могу. У меня есть несколько вкладок с открытыми *.cpp...

Code::Blocks - C++
В Code::Blocks когда ты откомпилил программу в Debug, после внес изменения и снова &quot;откомпилил&quot;, то нет результата от 2-й компиляции -...

code::blocks 10.05 - C++
Я установил себе C++ code::blocks. И когда я компилирую любую программу и потом запускаю .exe выдаёт ошибку не находит libstdc++-6.dll. Я...

Code::blocks - C++
Помогите как включить #include &lt;graphics.h&gt; #include &lt;windows.h&gt; в Code::block - се ,

8
Croessmah
Ушел
Эксперт CЭксперт С++
13553 / 7704 / 872
Регистрация: 27.09.2012
Сообщений: 19,006
Записей в блоге: 3
Завершенные тесты: 1
18.07.2013, 13:32 #2
C++
1
2
3
4
5
6
string Expresion::replaceall(string str,string srch,string repl){
    unsigned p=0;
    while((p=str.find(srch))!=string::npos)//Бесконечный цикл
        str=str.replace(p,srch.length(),repl);
    return str;
}
1
FanOfGun
6 / 6 / 1
Регистрация: 13.10.2012
Сообщений: 101
18.07.2013, 13:54  [ТС] #3
сейчас код вот такой:
C++
1
2
3
4
5
6
7
8
string Expresion::replaceall(string str,string srch,string repl){
    unsigned p=0;
    while((p=str.find(srch,p))!=string::npos){
        str=str.replace(p,srch.length(),repl);
        cout << "while" <<endl;
    }
    return str;
}
поставил брейкпоинт на cout..., запускаю с помощью Debug/Continue, но программа не останавливается. В чем может быть проблема?
0
Croessmah
Ушел
Эксперт CЭксперт С++
13553 / 7704 / 872
Регистрация: 27.09.2012
Сообщений: 19,006
Записей в блоге: 3
Завершенные тесты: 1
18.07.2013, 14:06 #4
Цитата Сообщение от FanOfGun Посмотреть сообщение
В чем может быть проблема?
Я же Вам написал, что цикл бесконечный.
Код
"test+2"
p == 4
меняем в строке "+" на " + "
получаем "test + 2"
начинаем поиск с позиции 4.
Находим "+" в позиции 5
меняем "+" на " + "
получаем "test  +  2"
ищем с позиции 5 - находим "+" в позиции 6 и так до бесконечности
Добавлено через 5 минут
Корректируйте позицию. Примерно так:
C++
1
2
3
4
    while((p=str.find(srch,p))!=string::npos){
        str=str.replace(p,srch.length(),repl);
          p+=repl.size();
     }
1
FanOfGun
6 / 6 / 1
Регистрация: 13.10.2012
Сообщений: 101
18.07.2013, 14:53  [ТС] #5
да нет, вы не поняли, я понял что он бесконечный(кстати спасибо за решение) у меня на breakpoint'е не останавливается прога, я не могу понять почему
0
alsav22
5426 / 4821 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
18.07.2013, 15:04 #6

Не по теме:

А раньше работало? У меня это тоже, почему-то, не работает.



Добавлено через 7 минут

Не по теме:

И не работает именно в 12 Code::Blocks, в 10 - работает.

0
Croessmah
Ушел
Эксперт CЭксперт С++
13553 / 7704 / 872
Регистрация: 27.09.2012
Сообщений: 19,006
Записей в блоге: 3
Завершенные тесты: 1
18.07.2013, 15:08 #7
Цитата Сообщение от FanOfGun Посмотреть сообщение
у меня на breakpoint'е не останавливается прога
у меня break point'ы в Code::Blocks вообще не работают так что без понятия, да и юзаю я эту IDE раз в сто лет
0
volvo
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
24004 / 15985 / 4834
Регистрация: 22.10.2011
Сообщений: 28,267
Записей в блоге: 5
18.07.2013, 15:15 #8
FanOfGun, нормально останавливается (на 12.11):
0
Миниатюры
[Code::Blocks 12.11] непонятное зацикливание  
Nerock
8 / 7 / 0
Регистрация: 02.05.2012
Сообщений: 92
01.08.2013, 20:32 #9
UI, у меня тоже, я юзаю 10-ю версию, компилятор g++
0
01.08.2013, 20:32
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.08.2013, 20:32
Привет! Вот еще темы с ответами:

Code Blocks ошибка - C++
/usr/include/c++/4.7/type_traits|1857| required from ‘class std::result_of&lt;std::_Mem_fn&lt;void (TftpServer::*)()&gt;(TftpServer)&gt;’| что...

Компиляция в Code Blocks - C++
Скачала Code Blocks с компилятором. Написала #include &lt;iostream&gt; int main() { std::cout &lt;&lt; &quot;Hello World!!!&quot;; ...

sdl и code::blocks - C++
Code::Blocks версии 12.11 MinGW SDL2-2.0.0 Вобщем действую по гайду отцов с Хабра. Скачиваю SDL2-2.0.0 в архиве, вытаскиваю егго из...

Проблемка с Code::Blocks - C++
Я создаю программы на С++, но почему-то после компиляции он не создает екзешник. Гуглил, но толку 0. Что подскажите?


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

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

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