Написать и протестировать функцию, которая "переворачивает" строку, передаваемую ей в качестве параметра. - C (СИ)
Формулировка задачи:
Написать и протестировать функцию, которая "переворачивает" строку, передаваемую ей в качестве параметра.
Что не так???
#include <stdio.h>
#include <conio.h>
#include <string.h>
chang(char s[100])
{
char c;
int i,k;
for(k=0;s[k]!='\0';k++);
for(i=0;i<(k/2);i++)
{
c=s[i];
s[i]=s[k-1-i];
s[k-1-i]=c;
}
}
main()
{
char str[100];
printf("Vvedite stroky:\n");
scanf("%s,&str");
printf("\n\nNovaya stoka:%s ",chang(str));
}Решение задачи: «Написать и протестировать функцию, которая "переворачивает" строку, передаваемую ей в качестве параметра.»
textual
Листинг программы
for ( t = s; *t; ++t ) ; // цикл(от первого символа; до символа конца строки; следующий символ)
for ( h = s, t -= 1; h < t; ++h, --t ) // h от первого символа, t от последнего символа; до серидины строки; обе переменные движутся к центру строки. h плюсуется т.к. он начала, а t в минус т.к. с конца строки идет
{
// следующие три операции меняют
// данные между переменными *h и *t
// т.е. вначале мы меняем первую и последние буквы
// следующая итерация - меняем вторую и предпоследнюю буквы
// и т.д. до середины строки
c = *h;
*h = *t;
*t = c;
}
Объяснение кода листинга программы
- Первый цикл начинается с инициализации переменной
tзначениемsи выполняется до тех пор, пока*tне станет равным\0(т.е. до конца строки). Переменнаяtувеличивается на 1 после каждой итерации цикла. - Второй цикл начинается с инициализации переменных
hиtзначениемs. Переменнаяhувеличивается на 1, а переменнаяtуменьшается на 1 после каждой итерации цикла. Цикл выполняется до тех пор, покаhменьшеt(т.е. до середины строки). - Внутри второго цикла выполняется следующая операция:
- Переменная
cинициализируется значением символа, на который указывает переменнаяh(т.е. первый символ строки). - Значение переменной
hзаменяется значением переменнойt(т.е. последний символ строки). - Значение переменной
tзаменяется значением переменнойc(т.е. первый символ строки). - Эта операция повторяется для каждой итерации второго цикла (т.е. для каждой пары символов, начиная с первого и последнего символов строки, и двигаясь к середине строки).
- Переменная
- Результатом выполнения функции будет перевернутая строка, которая будет содержаться в переменной
s.