Cyborg Terminator
Мудрец
(11372)
10 лет назад
#include <cstdio>
#include <cstring>
using namespace std;
struct stack_ch {
char* ptr;
int maxlen;
int cnt;
};
int stack_init(stack_ch* st, int num);
void stack_push(stack_ch* st, char ch);
void stack_clear(stack_ch* st);
int main(void){
char s[64] = "abc#d##c";
char* p, *e;
stack_ch st;
stack_init(&st, (int)strlen(s));
for(p = &s[0]; *p; ++p){
stack_push(&st, *p);
}
printf("src: %s\n", s);
printf("dst: ");
fwrite(st.ptr, sizeof(char), (size_t)st.cnt, stdout);
putchar('\n');
stack_clear(&st);
//второе слово
strcpy(s, "t#This 8#is Sport###arta!!111####");
stack_init(&st, strlen(s));
for(p = &s[0]; *p; ++p){
stack_push(&st, *p);
}
printf("\nsrc: %s\n", s);
strncpy(s, st.ptr, (size_t)st.cnt);
s[st.cnt] = '\0';
printf("dst: %s\n", s);
getchar();
return 0;
}
//инициализация стека
int stack_init(stack_ch* st, int num){
st->ptr = new char[num];
if(st->ptr == NULL)
return 0;
st->maxlen = num;
st->cnt = 0;
return 1;
}
//втолкнуть в стэк
void stack_push(stack_ch* st, char ch){
if(st->cnt < st->maxlen) {
if(ch == '#'){
if(st->cnt > 0)
--(st->cnt);
} else
st->ptr[st->cnt++] = ch;
}
}
//удаление стэка
void stack_clear(stack_ch* st){
if(st->ptr != NULL){
delete[] st->ptr;
st->ptr = NULL;
}
st->maxlen = st->cnt = 0;
}
Формат входных данных
В первой и единственной строке входного файла записан текст с расставленными в нем стирающими символами .
Формат выходных данных
Вывести текст в преобразованном виде.
Примеры:
Вход
abc#d##c
Выход
ac
Вход
t#This 8#is Sport###arta!!111####
Выход
This is Sparta!