|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
30.01.2010, 02:01 | #1 |
Пользователь
Регистрация: 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. Причина: натупил |
30.01.2010, 14:09 | #2 |
Участник клуба
Регистрация: 15.07.2008
Сообщений: 1,933
|
По поводу параметров, которые передаются в ф-цию Вы почти правы. Только конкретные числа/буквы не подставляются вместо char in[], char out[] а запихиваются в них... Почитайте где-нибудь что такое переменные, каково их представление в памяти и т.д. и тогда поймёте.
void reverse отличается от int reverse возвращаемым значением - первая не возвращает ничего(void - пустота), вторая возвращает целое число. В качестве второго параметра передавать нужно не строку, а буфер, куда будет записываться перевёрнутая строка. Код:
Код:
|
30.01.2010, 21:49 | #3 |
Пользователь
Регистрация: 27.01.2010
Сообщений: 25
|
уже понятнее спасибо
еще хотелось бы узнать что делает 6-я строка out[length] = '\0'; и почему out[i] = in[length-i-1]; от длины строки нужно отнимать еденичку, иначе функция не выполняется ? |
30.01.2010, 21:59 | #4 | |
Участник клуба
Регистрация: 15.07.2008
Сообщений: 1,933
|
Цитата:
Именно потому, если не отнимать 1, то первым элементом копируется этот самый 0(который в Си является признаком конца строки, потому ф-ции вывода думают, что строка пустая и не выводят ничего). Если не добавить 0 в конце, то выведется мусор(так как ф-ции вывода не будут знать, где строка заканчивается) |
|
31.01.2010, 03:32 | #5 |
Пользователь
Регистрация: 27.01.2010
Сообщений: 25
|
тоесть команда out[length] = '\0'; дописывает етот самый 0 в конце строки ?
|
31.01.2010, 03:41 | #6 |
Участник клуба
Регистрация: 15.07.2008
Сообщений: 1,933
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
реверс целых чисел на Си. подскажите, в чем ошибка. | Kastet14 | Помощь студентам | 7 | 14.01.2010 18:08 |
Поменять местами элементы в массиве (реверс) | Андрей.12 | Помощь студентам | 7 | 15.11.2009 16:51 |
Реверс четверок | Ivaine | Помощь студентам | 1 | 29.12.2008 18:22 |