Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.01.2010, 02:01   #1
grimm_jow
Пользователь
 
Регистрация: 27.01.2010
Сообщений: 25
Вопрос Реверс 2

-написать функцию, реверсирующую строку in и записывающую результат в out:
void reverse(char in[], char out[]);


вот собственно код :

#include <QtCore/QCoreApplication>
#include <QtCore/QDebug>

void reverse(char in[], char out[])
{
int i = strlen(in);
for (int j=0;j<=i;j++)
{

in[i]=in[i-j];
out[i]=in[i];
qDebug()<<out[i];
}
}


int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);

reverse("Helooooooooooooooooooooooo ooo","nenujnaya_stroka");


return a.exec();
}



Но его забраковали т.к. "массив in не должен модифицироваться (это «искусственное» условие)" помоги понять что не так ?что исправить ?

p.s. заранее извиняюсь за тупой вопрос, вот как бэ он....
мы создаем функцию reverse в 4-й строке и в скобочках указываем переменные с которыми она будет работать (char in[], char out[]), затем пишем тело функции, тоесть какие операции необходимо провести над переменными, далее в 19-й строке мы эту функцию вызываем а в скобочках указывам конкретные числа/буквы которые подставятся в функцию вместо (char in[], char out[])
так ???
я все правильно понял ??
и чем отличается void reverse(char in[], char out[]) от int reverse(char in[], char out[]) ??

надеюсь на вашу помощь...

Последний раз редактировалось grimm_jow; 30.01.2010 в 02:10. Причина: натупил
grimm_jow вне форума Ответить с цитированием
Старый 30.01.2010, 14:09   #2
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

По поводу параметров, которые передаются в ф-цию Вы почти правы. Только конкретные числа/буквы не подставляются вместо char in[], char out[] а запихиваются в них... Почитайте где-нибудь что такое переменные, каково их представление в памяти и т.д. и тогда поймёте.
void reverse отличается от int reverse возвращаемым значением - первая не возвращает ничего(void - пустота), вторая возвращает целое число.
В качестве второго параметра передавать нужно не строку, а буфер, куда будет записываться перевёрнутая строка.
Код:
void reverse(const char in[], char out[]) // const указывает, что переменная не должна менятся
{
    int length = strlen(in);
    for(int i = 0; i < length; i++)
        out[i] = in[length-i-1];
    out[length] = '\0';
}
вызов:
Код:
int main()
{
     char buffer[80];
     reverse("Helllooooo", buffer);
     std::cout << buffer;
}
Для Qt сами переделаете )
netrino вне форума Ответить с цитированием
Старый 30.01.2010, 21:49   #3
grimm_jow
Пользователь
 
Регистрация: 27.01.2010
Сообщений: 25
По умолчанию

уже понятнее спасибо
еще хотелось бы узнать что делает 6-я строка
out[length] = '\0';
и почему
out[i] = in[length-i-1]; от длины строки нужно отнимать еденичку, иначе функция не выполняется ?
grimm_jow вне форума Ответить с цитированием
Старый 30.01.2010, 21:59   #4
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Цитата:
Сообщение от grimm_jow Посмотреть сообщение
уже понятнее спасибо
еще хотелось бы узнать что делает 6-я строка
out[length] = '\0';
и почему
out[i] = in[length-i-1]; от длины строки нужно отнимать еденичку, иначе функция не выполняется ?
Оба вопроса касаются специфики хранения строк в Си. А хранятся они в виде массива типа char, последним элементом которого является число 0.
Именно потому, если не отнимать 1, то первым элементом копируется этот самый 0(который в Си является признаком конца строки, потому ф-ции вывода думают, что строка пустая и не выводят ничего). Если не добавить 0 в конце, то выведется мусор(так как ф-ции вывода не будут знать, где строка заканчивается)
netrino вне форума Ответить с цитированием
Старый 31.01.2010, 03:32   #5
grimm_jow
Пользователь
 
Регистрация: 27.01.2010
Сообщений: 25
По умолчанию

тоесть команда out[length] = '\0'; дописывает етот самый 0 в конце строки ?
grimm_jow вне форума Ответить с цитированием
Старый 31.01.2010, 03:41   #6
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Цитата:
Сообщение от grimm_jow Посмотреть сообщение
тоесть команда out[length] = '\0'; дописывает етот самый 0 в конце строки ?
Ну безусловно. Ведь length мы положили равным длине строки в начале ф-ции
netrino вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
реверс целых чисел на Си. подскажите, в чем ошибка. Kastet14 Помощь студентам 7 14.01.2010 18:08
Поменять местами элементы в массиве (реверс) Андрей.12 Помощь студентам 7 15.11.2009 16:51
Реверс четверок Ivaine Помощь студентам 1 29.12.2008 18:22