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

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

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

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

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

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

Установка Code Blocks - C++
Не могли бы вы помочь верно поставить программку кодблокс со всеми библиотеками\компиляторами, пожалуйста. Если похожая тема есть,...

Настройка Code::Blocks - C++
Здравствуйте! Ребята помогите настроить компилятор и отладчик в Code::Blocks.Дело в том что я пока мись чайник в ентом деле, да и с...

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

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

Code Blocks ошибка - C++
Помогите разобраться, почему программа выдает ошибку.

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт CЭксперт С++
13054 / 7317 / 815
Регистрация: 27.09.2012
Сообщений: 18,053
Записей в блоге: 3
Завершенные тесты: 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
Модератор
Эксперт CЭксперт С++
13054 / 7317 / 815
Регистрация: 27.09.2012
Сообщений: 18,053
Записей в блоге: 3
Завершенные тесты: 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
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
18.07.2013, 15:04     [Code::Blocks 12.11] непонятное зацикливание #6

Не по теме:

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



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

Не по теме:

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

Croessmah
Модератор
Эксперт CЭксперт С++
13054 / 7317 / 815
Регистрация: 27.09.2012
Сообщений: 18,053
Записей в блоге: 3
Завершенные тесты: 1
18.07.2013, 15:08     [Code::Blocks 12.11] непонятное зацикливание #7
Цитата Сообщение от FanOfGun Посмотреть сообщение
у меня на breakpoint'е не останавливается прога
у меня break point'ы в Code::Blocks вообще не работают так что без понятия, да и юзаю я эту IDE раз в сто лет
volvo
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
23244 / 15235 / 4427
Регистрация: 22.10.2011
Сообщений: 27,095
Записей в блоге: 4
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] непонятное зацикливание
Еще ссылки по теме:

WinAPI-Code::Blocks - C++
Пытаюсь в C::B создать любое приложение WinAPI - ничего не работает. Открывается пустая консоль и все. Причем прога висит в диспетчере...

не компилит code blocks - C++
привет, чтото после переустановки винды сталкнулся с проблемой: не компилит ну ни в каком образе - как исправить такое?

Хедеры в Code Blocks - C++
До этого сидел в студии 10ой, сейчас скачал Code Blocks, настроил компилятор, проблема в том, что когда создаю класс, компилятор не видит...

настроить Code Blocks - C++
Подскажите как убрать в коде блокс проверку орфографиии текста Например: cout &lt;&lt; &quot;Enter name of inflatable item: &quot;; //так Enter name of...


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

Или воспользуйтесь поиском по форуму:
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] непонятное зацикливание
Ответ Создать тему
Опции темы

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