LINUX.ORG.RU

reverse putcar


0

0

задача: надо вводимые символы выводить задом на перед. Если getchar = "АБВ" то putchar должен быть "ВБА". Как это лучше сделать?


Ответ на: комментарий от sdio

Виноват исправлюсь. Язык Си.

ban
() автор топика

язык то какой хоть бы сказал? ы.

на Си примерно так:

#include <stdio.h>

void reverse_print()
{
    int ch;
    if ((ch = getchar())!= EOF)
    {
        reverse_print();
        putchar(ch);
    }
}

int main()
{
    reverse_print();
    return 0;
}

anonymous
()
Ответ на: комментарий от anonymous

А вот мой скромный чайниковский код на С++:

#include <cstdio>
int main()
{
	int in, out[255], i=0;
	in = getchar();
	while(in!='\n'){
		out[i++]=in;
		in = getchar();
	}
	for(int j=i-1; j>=0; j--){
		putchar(out[j]);
	}
	printf("\n");
	return 0;
}

Selecter ★★★★
()
Ответ на: комментарий от Selecter

>Кстати, почему не работает такой вариант?

потому что пишешь через жёпу. кто тебе сказал, что ввод будет оканчиваться символом '\n' и во входном потоке не более 255 символов?

anonymous
()
Ответ на: комментарий от Selecter

>while(in!='\n' || in!=EOF)

логику в школе ниасилил? Выражение (in != '\n' || in != EOF) всегда ложно!!

anonymous
()
Ответ на: комментарий от anonymous

>логику в школе ниасилил? Выражение (in != '\n' || in != EOF) всегда ложно!!

ну да, &&. С кем не бывает.

>потому что пишешь через жёпу

Стараюсь всё же писать правильно. жопа пишется через О, кстати!

>кто тебе сказал, что ввод будет оканчиваться символом '\n' 

Я сказал. На enter нажми и удивись.

>и во входном потоке не более 255 символов?

Напиши как надо, прославишься в моих глазах.

Так?
#include <cstdio>
int main()
{
	int in, i=0;
	int* out = new int;
	in = getchar();
	while(in!='\n' && in!=EOF){
		out[i++]=in;
		in = getchar();
	}
	for(int j=i-1; j>=0; j--){
		putchar(out[j]);
	}
	printf("\n");
	delete [] out;
	out = NULL;
	return 0;
}

Selecter ★★★★
()
Ответ на: комментарий от Selecter

>Я сказал. На enter нажми и удивись

кто тебе сказал, что нужно нажимать enter (читай: что встретится 
символ перевода строки). можно нажать ^D^D и ввод закончится без '\n'

>Напиши как надо, прославишься в моих глазах.

я уже приводил свой код (третье письмо в этом треде)

а тебе таки следует прочитать про new и delete, и подумать над тем 
сколько памяти выделяется оператором new int; и в данном контексте 
out[i++] вообще непонятно что означает.

если ты уж таки пытаешься реализовать это на ЦПП, то это, пожалуй, 
следовало бы сделать примерно так:

#include <iostream>
#include <string>
#include <algorithm>

int main()
{
    std::string s;
    std::string acc;
    while (std::cin >> s)
        acc += s;
    reverse(acc.begin(), acc.end());
    std::cout << acc << std::endl;
    return 0;
}


коли ты пишешь на ЦПП, то должен по возможности использовать ЦППшные 
высокоуровневые средства, а не сишные массивы ;)

anonymous
()
Ответ на: комментарий от anonymous

C makes it easy to shoot yourself in the foot; C++ makes it harder, but when you do succeed, you will blow away your whole leg." - Bjarne Stroustrup

Selecter ★★★★
()

2ban:

> Если getchar = "АБВ" то putchar должен быть "ВБА".

Т.е., _весь_ входной поток надо транспонировать?

Или, все-таки, построчно?

Die-Hard ★★★★★
()
Ответ на: комментарий от Die-Hard

весь. Эта задача из Кернигана Ритчи.

ban
() автор топика
Ответ на: комментарий от Selecter

>int* out = new int;
>in = getchar();
>while(in!='\n' && in!=EOF){
>out[i++]=in;
>in = getchar();
>}

программирование явно не твое, лучше никому больше ничего не советуй.

anonymous
()
Ответ на: комментарий от anonymous

напишите программу, но только с использованием простейших свойсв Си, чтоб мне было понятно. По первой главе надо написать. СПП вообще не знаю (Зря старались)

ban
() автор топика
Ответ на: комментарий от ban

2 ban: ты тред то внимательно читал? уже приводилось правильное решение твоей задачки (см. третий пост в треде). или тебе рекурсивный вариант не понравился? тогда это твои личные половые проблемы..

anonymous
()

А вот примитивная программа для переворачивания _очень_
длинных потоков:

#include <stdio.h>

int main()
{
int ch;
FILE *tmp=tmpfile();

    while( (ch = getchar())!= EOF )
       putc(ch,tmp);

    fseek(tmp,-1L,SEEK_CUR);

    do
       putchar(getc(tmp));
    while(fseek(tmp,-2L,SEEK_CUR) == 0 );

    return 0;
}

Die-Hard ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.