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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 08.03.2011, 08:38   #1
videolord
Пользователь
 
Аватар для videolord
 
Регистрация: 23.02.2011
Сообщений: 28
Смущение Операции со стеками

Я нашел интересный код но так и не пойму как выполняется в обшем
путаница! Поставил комменты,можете исправить комменты если неверно поставил и ответить на вопросы

Ввод
$ ________ Videolord_____________ $
Вывод
<i>Videolord</i>


Код:
#include <cstdio>
#include <stack>
#include <cctype>
#include <iostream>

using namespace std;

int main(void) {
 char ch;
 stack<char> sym;
  while ((ch = getchar()) != EOF) {
  while ((ch = getchar()) != '$') {//вводим символы пока не $
  if (ch == ' ') {   //если пробелы то продолжаем 
  continue;
  }
  if (isalpha(ch)) {     //если строка начинается с $
  if (sym.empty()) {    //если строка пустой то
	  printf ("<i>%c", ch);   //то печатать <i>
	  sym.push('c');    //зачем здесь символ С так и не понял
	  }else {                
      putchar(ch);    //если стек не пустой то вывести символы
      }
  } 
  }
 if (!sym.empty()) {      //если стек не пустой 
      printf ("</i>");  //то печатать </i>
       sym.pop(); //зачем удалять последний элемент?
      }
        putchar('\n');
        getchar();
    }
system("pause");  
  return 0;
}

Последний раз редактировалось Stilet; 08.03.2011 в 10:41.
videolord вне форума Ответить с цитированием
Старый 08.03.2011, 10:53   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
if (isalpha(ch)) { //если строка начинается с $
if (isalpha(ch)) { //если символ - буква.


А что вообще программа призвана делать? Только обрамлять слово? Так ИМХО это можно и попроще делать
Код:
 char ch,s[200];
 int i=0;bool b=false;
 while (((ch = getch()) != 13)&&(i<200)) {cout<<ch;
	if(ch == '$') {
		s[i++]='<';
		if(b) {s[i++]='/';}
		s[i++]='i';s[i++]='>';
		b=!b;
	} else {
		s[i++]=ch;
	}
  }
  s[i++]=0;
  cout<<'\n'<<s;
  system("pause");  
  return 0;
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 08.03.2011, 11:48   #3
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Сдесь приведён ярчайший пример вопиюше нерационального использования памяти.

Код:
sym.push('c');    //зачем сдесь символ С так и не понял
В этой строке мы просто вводим в стек "чё попало"

Код:
sym.pop(); //зачем удалять последний элемент?
Отсюда это "чё попало удаляем". Стек используем как счётчик длины строки

если без стека - x++, x-- с проверками на 0.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Операции со стеками STL Blad47 Общие вопросы C/C++ 5 16.10.2010 14:54
Нужно сделать простую программу со стеками Photoshopper Общие вопросы C/C++ 3 03.09.2010 22:49
Cортировка по алфавиту со стеками skiffter Помощь студентам 0 30.03.2010 21:11