Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
6 / 6 / 4
Регистрация: 13.10.2012
Сообщений: 101
1

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

18.07.2013, 13:24. Просмотров 983. Ответов 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.07.2013, 13:24
Ответы с готовыми решениями:

Code::blocks и VS
всем привет, у меня такой вопрос: какой в Code::blocks аналог для #include stdafx.h? Нужно...

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

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

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

8
Don't worry, be happy
16921 / 9797 / 1887
Регистрация: 27.09.2012
Сообщений: 24,296
Записей в блоге: 2
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
6 / 6 / 4
Регистрация: 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
Don't worry, be happy
16921 / 9797 / 1887
Регистрация: 27.09.2012
Сообщений: 24,296
Записей в блоге: 2
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
6 / 6 / 4
Регистрация: 13.10.2012
Сообщений: 101
18.07.2013, 14:53  [ТС] 5
да нет, вы не поняли, я понял что он бесконечный(кстати спасибо за решение) у меня на breakpoint'е не останавливается прога, я не могу понять почему
0
5477 / 4872 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
18.07.2013, 15:04 6

Не по теме:

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



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

Не по теме:

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

0
Don't worry, be happy
16921 / 9797 / 1887
Регистрация: 27.09.2012
Сообщений: 24,296
Записей в блоге: 2
18.07.2013, 15:08 7
Цитата Сообщение от FanOfGun Посмотреть сообщение
у меня на breakpoint'е не останавливается прога
у меня break point'ы в Code::Blocks вообще не работают так что без понятия, да и юзаю я эту IDE раз в сто лет
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
30660 / 20009 / 7827
Регистрация: 22.10.2011
Сообщений: 34,838
Записей в блоге: 6
18.07.2013, 15:15 8
FanOfGun, нормально останавливается (на 12.11):
0
Миниатюры
[Code::Blocks 12.11] непонятное зацикливание  
9 / 8 / 2
Регистрация: 02.05.2012
Сообщений: 92
01.08.2013, 20:32 9
UI, у меня тоже, я юзаю 10-ю версию, компилятор g++
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.08.2013, 20:32

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

code::blocks 10.05
Я установил себе C++ code::blocks. И когда я компилирую любую программу и потом запускаю .exe...

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

Libcurl code blocks
Уже вторые сутки пытаюсь установить библиотеку curl, но перерыв кучу материала в интернете так и не...

отладка Code::Blocks
Помогите кто разбирается в этом:(. Недавно скачал новые версии Code::Blocks (10.05) ...


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

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

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