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

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

Восстановить пароль Регистрация
 
FanOfGun
6 / 6 / 1
Регистрация: 13.10.2012
Сообщений: 101
18.07.2013, 13:24     [Code::Blocks 12.11] непонятное зацикливание #1
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)
что я делаю не так? Заранее благодарен.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.07.2013, 13:24     [Code::Blocks 12.11] непонятное зацикливание
Посмотрите здесь:

C++ отладка Code::Blocks
MS VS in CODE BLOCKS C++
C++ Ошибки в Code Blocks
C++ Ошибки в Code Blocks
C++ настроить Code Blocks
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11836 / 6815 / 770
Регистрация: 27.09.2012
Сообщений: 16,899
Записей в блоге: 2
Завершенные тесты: 1
18.07.2013, 13:32     [Code::Blocks 12.11] непонятное зацикливание #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;
}
FanOfGun
6 / 6 / 1
Регистрация: 13.10.2012
Сообщений: 101
18.07.2013, 13:54  [ТС]     [Code::Blocks 12.11] непонятное зацикливание #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, но программа не останавливается. В чем может быть проблема?
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11836 / 6815 / 770
Регистрация: 27.09.2012
Сообщений: 16,899
Записей в блоге: 2
Завершенные тесты: 1
18.07.2013, 14:06     [Code::Blocks 12.11] непонятное зацикливание #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();
     }
FanOfGun
6 / 6 / 1
Регистрация: 13.10.2012
Сообщений: 101
18.07.2013, 14:53  [ТС]     [Code::Blocks 12.11] непонятное зацикливание #5
да нет, вы не поняли, я понял что он бесконечный(кстати спасибо за решение) у меня на breakpoint'е не останавливается прога, я не могу понять почему
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
18.07.2013, 15:04     [Code::Blocks 12.11] непонятное зацикливание #6

Не по теме:

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



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

Не по теме:

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

Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11836 / 6815 / 770
Регистрация: 27.09.2012
Сообщений: 16,899
Записей в блоге: 2
Завершенные тесты: 1
18.07.2013, 15:08     [Code::Blocks 12.11] непонятное зацикливание #7
Цитата Сообщение от FanOfGun Посмотреть сообщение
у меня на breakpoint'е не останавливается прога
у меня break point'ы в Code::Blocks вообще не работают так что без понятия, да и юзаю я эту IDE раз в сто лет
volvo
Супер-модератор
 Аватар для volvo
21815 / 14178 / 3948
Регистрация: 22.10.2011
Сообщений: 25,055
Записей в блоге: 2
18.07.2013, 15:15     [Code::Blocks 12.11] непонятное зацикливание #8
FanOfGun, нормально останавливается (на 12.11):
Миниатюры
[Code::Blocks 12.11] непонятное зацикливание  
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.08.2013, 20:32     [Code::Blocks 12.11] непонятное зацикливание
Еще ссылки по теме:

C++ Установка Code Blocks
C++ Компиляция в Code Blocks
C++ Code::Blocks

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

Или воспользуйтесь поиском по форуму:
Nerock
8 / 7 / 0
Регистрация: 02.05.2012
Сообщений: 92
01.08.2013, 20:32     [Code::Blocks 12.11] непонятное зацикливание #9
UI, у меня тоже, я юзаю 10-ю версию, компилятор g++
Yandex
Объявления
01.08.2013, 20:32     [Code::Blocks 12.11] непонятное зацикливание
Ответ Создать тему
Опции темы

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