Перейти к содержимому

Фото
- - - - -

"ABC" в "BCA"


  • Вы не можете создать новую тему
  • Please log in to reply
8 ответов в этой теме

#1 bAn

bAn
  • Пользователь
  • 23 сообщений

Отправлено 03 мая 2005 - 20:13

задача (язык СИ): надо вводимые символы выводить задом на перед. Если getchar = "АБВ" то putchar должен быть "ВБА".
Мое решение:
Создаем 2 массива. 1) он сохраняет значения вводимые с клавиатуры в массив
2) последнее значение 1го массива присваивается первому значению, предпоследнее значение 1го массива второму своему значению и т.д
возвращает 2ой массив.

помогите реализовать.
  • 0

#2 Davix

Davix

    Майский СЭлвер

  • S-Модератор
  • 7 430 сообщений
  • Откуда:Tallinn, EU

Отправлено 03 мая 2005 - 20:24

я как-то хитрее делал - вспомню, напишу
  • 0
Music ::: davix.pdj.ru

Photo ::: davix.eu

#3 V^v

V^v
  • Пользователь
  • 316 сообщений

Отправлено 03 мая 2005 - 20:40

задача (язык СИ): надо вводимые символы выводить задом на перед. Если getchar = "АБВ" то putchar должен быть "ВБА".
Мое решение:
Создаем 2 массива. 1) он сохраняет значения вводимые с клавиатуры в массив
2) последнее значение 1го массива присваивается первому значению, предпоследнее значение 1го массива второму своему значению и т.д
возвращает 2ой массив.

помогите реализовать.

Просмотреть сообщение

getchar() возвращает один int, а не строку (массив char c нулем на конце).
int reverse(int c) -- функция принимает и возвращает int. получается ты будешь менять местами одно и то же значение ??
я предполагаю, что ты хотел это: считать ввод в строку, и печатать строку с конца.
тогда очень просто решается: читай fgets()'ом, а дальше в цикле от i = strlen(s) -1; до i >= 0; печатай.
  • 0
int main(void)

#4 bAn

bAn
  • Пользователь
  • 23 сообщений

Отправлено 04 мая 2005 - 10:51

можеш превести код прграммы и библиотеки?
  • 0

#5 tomatensaft

tomatensaft

    Samurai Jack

  • Пользователь
  • 449 сообщений
  • Откуда:Tallinn

Отправлено 04 мая 2005 - 13:05


#include <stdio.h>

#include <string.h>



int main(int argc, char *argv[]) 

{

 char buf[1024].

 fgets(stdin, buf);

 for(int i = strlen(buf); i >= 0; i--)

 {

   fputc(buf[i]);

 }

 return 0;

}


  • 0
"This is all I want'd t' say 'bout dat..." © Forest Gump

#6 ННБ

ННБ
  • Пользователь
  • 1 664 сообщений

Отправлено 04 мая 2005 - 13:10

навскидку написал но не тестил



#include <stdio.h>
#define ISIZE 25 // сюда ставь размер какой те нужен

void main ()
{
	char astring [ISIZE];
	char *pc;
	int icountar;

	pc = astring;
	for (icountar = 0; icountar<ISIZE; icountar++){
  *pc = getchar();
  pc++;
	}
	pc = astring + (ISIZE-1);

	for (icountar = 0; icountar<ISIZE; icountar++){
  putchar(*pc);
  pc--;
	}
}

как вариант если длина не фиксированная то типа так
int len; //lenght of Solution 
char cSolution[25]; // размер

len =strlen(cSolution);
while (len>=0){
	printf ("%c\n",cSolution[len]);
	len--;
}

Сообщение изменено: Ничего не боится (04 мая 2005 - 13:12 )

  • 0

#7 V^v

V^v
  • Пользователь
  • 316 сообщений

Отправлено 04 мая 2005 - 15:29

#include <stdio.h>
#include <string.h>

int main(int argc, char *argv[]) 
{
 char buf[1024].
 fgets(stdin, buf);
 for(int i = strlen(buf); i >= 0; i--)
 {
   fputc(buf[i]);
 }
 return 0;
}

Просмотреть сообщение

1. char buf[1024];
2. функции fgets() не хватает аргументов:
char *fgets(char *s, int size, FILE *stream);
3. for(int i = strlen(buf); i >= 0; i--)
в C нельзя обьявлять переменную в цикле, в отличии от C++.
4. int fputc(int c, FILE *stream);

Добавлено в [mergetime]1115213378[/mergetime]

навскидку написал но не тестил

#include <stdio.h>
#define ISIZE 25 // сюда ставь размер какой те нужен

void main ()
{
	char astring [ISIZE];
	char *pc;
	int icountar;

	pc = astring;
	for (icountar = 0; icountar<ISIZE; icountar++){
  *pc = getchar();
  pc++;
	}
	pc = astring + (ISIZE-1);

	for (icountar = 0; icountar<ISIZE; icountar++){
  putchar(*pc);
  pc--;
	}
}

Просмотреть сообщение

Вариант void main () недопустим.
int main(void)

#define ISIZE 25 // сюда ставь размер какой те нужен
Юзер должен обязательно вводить 25 символов?? а еслли хочет меньше/больше то надо заново компилировать программу... :unsure: ;)
  • 0
int main(void)

#8 tomatensaft

tomatensaft

    Samurai Jack

  • Пользователь
  • 449 сообщений
  • Откуда:Tallinn

Отправлено 04 мая 2005 - 16:07

1. char buf[1024];
2. функции fgets() не хватает аргументов:
char *fgets(char *s, int size, FILE *stream);
3. for(int i = strlen(buf); i >= 0; i--)
в C нельзя обьявлять переменную в цикле, в отличии от C++.
4.  int fputc(int c, FILE *stream);

Добавлено в [mergetime]1115213378[/mergetime]


Я не проверял ее, "на коленке" написал. =) Так что я не удивлен замечаниями... Я надеюсь, не будете сильно смеяться из-за того, что я всех функций (с их аргументами и особенностями) из стандартной библиотеки С наизусть не знаю? =)

3. В ANSI C нельзя объявлять, да, но, если не ошибаюсь, в последней редакции ISO C от 1999-го года -- можно... Этот фрагмент скомпилится с GCC при указании опции: -std=c99...
  • 0
"This is all I want'd t' say 'bout dat..." © Forest Gump

#9 V^v

V^v
  • Пользователь
  • 316 сообщений

Отправлено 04 мая 2005 - 20:45

Я не проверял ее, "на коленке" написал. =) Так что я не удивлен замечаниями... Я надеюсь, не будете сильно смеяться из-за того, что я всех функций (с их аргументами и особенностями) из стандартной библиотеки С наизусть не знаю? =)

3. В ANSI C нельзя объявлять, да, но, если не ошибаюсь, в последней редакции ISO C от 1999-го года -- можно... Этот фрагмент скомпилится с GCC при указании опции: -std=c99...

Просмотреть сообщение

http://david.tribble...m#C90-cond-expr

  Conditional expression declarations

C++ allows local variable declarations within conditional expressions (which appear within for, if, while, and switch statements). The scope of the variables declared in this context extends to the end of the statement containing the conditional expression. For example:

    for (int i = 0; i < SIZE; i++)
        a[i] = i + 1;

C90 does not allow this feature.

C99 allows this feature, but only within for statements.

[C99: §6.8.5]
[C++98: §3.3.2, 6.4, 6.5]


  • 0
int main(void)