Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Visual C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.03.2017, 22:16   #1
L@do
Новичок
Джуниор
 
Регистрация: 30.03.2017
Сообщений: 1
По умолчанию Алгоритм сортировочной станции

Всем привет. Нужна помощь, может кто-то глянуть где выход за предел массива, а то немогу найти. Отладчик показывает, что str[i] увеличивается, но я ни где не прописывал этого. Очень нужно.
Код:
void input()
{
	//cout << "Enter numbers and symbols";
	string str;
	getline(cin, str);
	//удаление пробелов из строки
	remove_if(str.begin(), str.end(), isspace);
	
	if (str[0] = '-')
	{
		str = "0" + str;
	}
	string st = "";
	stack<string> oper;
	for (int i = 0; i < str.length(); i++)
	{
		string temp;
		if (str[i] == '+')
		{
			temp = "+";
		}
		else if (str[i] == '-')
		{
			temp = "-";
		}
		else if (str[i] == '*')
		{
			temp = "*";
		}
		else if (str[i] == '/')
		{
			temp = "/";
		}
		else
		{
			temp = "";
			while (str[i] != '+' && str[i] != '-' && str[i] != '*' && str[i] != '/')
			{
				temp.push_back(str[i]);
				i++;
			}
			i--;
		}
		if (temp != "+" && temp != "-" && temp != "*" && temp != "/")
		{
			st.append(temp + " ");
		}
		else
		{
			while (!oper.empty())
			{
				if ((temp == "+" || temp == "-") || (oper.top() == "*" || oper.top() == "/"))
				{
					st.append(oper.top() + " ");
					oper.pop();
				}
				else
				{
					break;
				}
			}
			oper.push(temp);
		}
	}
	while (!oper.empty())
	{
		st.append(oper.top() + " ");
		oper.pop();
	}
	cout << st;
}

int main()
{
	input();
    return 0;
}
L@do вне форума Ответить с цитированием
Старый 31.03.2017, 05:55   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Цитата:
может кто-то глянуть где выход за предел массива, а то немогу найти
Код:
while (str[i] != '+' && str[i] != '-' && str[i] != '*' && str[i] != '/')
			{
				temp.push_back(str[i]);
				i++;
			}
p51x вне форума Ответить с цитированием
Старый 31.03.2017, 10:10   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

и вообще, в цикле for по переменной i внутри цикла менять i не комильфо,
а уж сделать внутри цикла ещё один цикл, где наращивать i - это вообще неправильно.
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Разработка рабочей компьютерной станции. Imperor Микроконтроллеры, робототехника, схемотехника, 3D принтеры 10 08.10.2016 14:44
Представление данных (станции метро) Subway_ Общие вопросы Delphi 1 12.09.2016 21:27
Заброшенные станции метро в Париже Alar Свободное общение 7 08.02.2014 17:04
Радио с добавлением станции poropeked Мультимедиа в Delphi 6 05.06.2011 20:54
Блокирование рабочей станции Windows+L sysyman Windows 1 20.04.2011 16:08