Переписать строку в обратном порядке - C (СИ) (79827)
Формулировка задачи:
НЕЛЬЗЯ ПОЛЬЗОВАТЬСЯ "#include<string.h">
ЗАД№1 Введите с клавиатуры строку символов, после чего запишите ее содержимое в другую строку в обратном порядке. Далее выведите вторую строку на экран. ЗАД №2 Введите с клавиатуры строку символов, после чего выведите на экран ее подстроку,включающую в себя символы с 5-го по 15-й. ЗАД №3Введите с клавиатуры строку символов, представляющую собой некоторое предложение. Найдите среди слов предложения самое длинное слово и выведите его на экран. №1 НЕ РАБОТАЕТ((( НЕ ПРАВИЛЬНО РАБОТАЕТ((((((((#include <stdio.h>
#include <conio.h>
void main()
{
const int n=100;
char str[n], str2[n], *p, *k;
int i;
printf("vvedute stroky: ");
gets(str);
p=str;
k=&str2[n];
for(i=0;i<n;i++)
*(k-i)=*(p+i);
puts("\n\npreabrazovannaya stroka:\n");
puts(str2);
puts("\n");
}Решение задачи: «Переписать строку в обратном порядке»
textual
Листинг программы
#include <stdio.h>
int main() {
char src[128] = "\0";
char dst[128] = "\0";
char* psrc = &src[sizeof(src)];
char* pdst = &dst[0];
/** читаем строку */
fgets(src, sizeof(src), stdin);
/** находим ее конец */
for ( ; *psrc == 0; psrc-- );
/** реверсируем */
for ( ; psrc != &src[0]; ) {
*pdst++ = *psrc--;
}
printf("%s\n", dst);
return 0;
}
Объяснение кода листинга программы
В этом коде:
- Создаются две строки: исходная
srcи целеваяdst. Обе строки инициализируются нулевым символом, что является признаком пустой строки. - Указатель
psrcинициализируется адресом последнего элемента массиваsrc, который считается пустым, поскольку мы только что его инициализировали нулевым символом. - Указатель
pdstинициализируется адресом первого элемента массиваdst. - Строка
srcсчитывается с помощью функцииfgets(). - Затем ищется конец строки путем цикла, который продолжается, пока не встретит нулевой символ.
- После того, как найден конец строки, начинается процесс реверса строки. Для этого используется еще один цикл, который продолжается, пока не встретит нулевой символ. В каждой итерации символ копируется из исходной строки в целевую строку.
- Наконец, отформатированная строка выводится на консоль с помощью функции
printf(). - Программа возвращает 0, что означает успешное выполнение.