Другие языки программирования и технологии

не могу сдать преподу программу, требует объяснения чуть ли не каждой строки. в программе на 100% не разбираюсь. С++

#include
using namespace std;
char *encrypt(char *str){
char *ret=str; непонятно что к чему тут приравнивается
while( *str )
++(*str++); я так понял, что str++ это в памяти перемещается на букву, а потом перемещается в строке на один символ вперед
return ret; возвращает он не str. тож не понял
}

char *decrypt(char *str){
char *ret=str;
while(*str)
--(*str++);
}

int main(){
char buf[BUFSIZ]; что именно значит bufsiz
while(printf("Slovo : ")&&scanf("%[^\n]%*c",buf)==1){
printf("Encrypted: %s\n", encrypt(buf));
printf("Decrypted: %s\n", decrypt(buf));
}
return 0;
}
буду рад, если объясните, а то сегодня не приняли, а дедлайн завтра
SR
Sergey Rudkovskiy
282
Нужно переписать понятнее.

#include <iostream>
char* encrypt(char* str) {
char* begin = str; // здесь запоминается начало строки
while (*begin) { // пока не конец строки
++(*begin); // здесь увеличивается на единицу значение типа char
++begin; // здесь увеличивается на единицу значение указателя
}
return str; // вернём тот же указатель, который взяли
}
char* decrypt(char* str) {
char* begin = str; // здесь запоминается начало строки
while (*begin) { // пока не конец строки
--(*begin); // здесь уменьшается на единицу значение типа char
++begin; // здесь увеличивается на единицу значение указателя
}
return str; // вернём тот же указатель, который взяли
}

int main() {
char buf[BUFSIZ]; // BUFSIZ - определённая в библиотеке stdio.h константа под размер буфера, равная 512
while (printf("Slovo : ") && scanf("%[^\n]%*c", buf) == 1) {
printf("Encrypted: %s\n", encrypt(buf));
printf("Decrypted: %s\n", decrypt(buf));
}
return 0;
}
Володя Пахомов
Володя Пахомов
87 534
Лучший ответ
char *ret=str; // ret присваивается адрес строки str
return ret; // возвращает адрес строки ret, то есть переделанной строки str
Юрий Степаненко Чушь. Код выглядит вполне корректно. Параметр метода указатель. Этот указатель сохранили в переменной и вернули как результат. А переменная-параметр изменила своё значение при выполнении. Можно было сделать наоборот: внутри функции пользоваться ret, а вернуть str. То же самое.
Инкремент ++ – это увеличение на единицу. Декремент -- – это уменьшение на единицу. Операции декремента и инкремента с лёгкостью заменяются арифметическими операциями или операциями присваивания. Но использовать операции инкремента и декремента намного удобнее.

//синтаксис операций инкремента и декремента
++/*имя переменной*/; // префиксный инкремент (преинкремент)
/*имя переменной*/++; // постфиксный инкремент (постинкремент)
--/*имя переменной*/; // префиксный декремент (предекремент)
/*имя переменной*/--; // постфиксный декремент (постдекремент)

BUFSIZ – размер массива буферизации.
Rаа Vссуф
Rаа Vссуф
15 060

Похожие вопросы