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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 08.09.2009, 00:05   #1
Golovastik
Заблокирован
 
Регистрация: 25.05.2009
Сообщений: 284
Плохо Реверсирование строк

Всем добрый вечер! Как всегда, практикуюсь по книжным примерам. Вот дошёл до темы реверсирования строк, то есть расположения букв в обратном порядке. Столкнулся с таким кодом, и не ясен стал цикл,то есть как именно происходит замена букв в нём?
Если кто может, подскажите,если не сложно? Не ясен сам цикл, и строка перед ним: end = &str[len-1];
Заранее благодарю.

Вот исходник:
Код:
#include <iostream>
using namespace std;

int main() 
{
setlocale(0, "" ); 
char str[] = "Россия - щедрая душа";
char *start, *end;
int len;
char t;

cout<<"Исходная строка: "<<str<<'\n';
len = strlen(str);
start = str;
end = &str[len-1];
while(start < end)
{
	t = *start;
	*start = *end;
	*end = t;
	start++;
	end--;
}
cout<<"Результат после реверсирования: \n"<<str;

cin.get();
return 0;
 
}
Golovastik вне форума Ответить с цитированием
Старый 08.09.2009, 00:14   #2
MaTBeu
Eclipse Foundation
Старожил
 
Аватар для MaTBeu
 
Регистрация: 19.09.2007
Сообщений: 2,604
По умолчанию

Указателю end присваивается адрес последней буквы в строке. Указателю start присваивается адрес первой буквы в строке.
Вот этот код
Код:
t = *start;
	*start = *end;
	*end = t;
меняет местами первую и последнюю буквы.
Затем указатели на первую и последнюю буквы смещаются на один вперед и на один назад соответственно. И так пока начало и конец не сойдутся.
MaTBeu вне форума Ответить с цитированием
Старый 08.09.2009, 20:38   #3
Golovastik
Заблокирован
 
Регистрация: 25.05.2009
Сообщений: 284
По умолчанию

Что-то я не могу понять вот эту строку:
Код:
while(start < end)

Ведь смотрите, строка Россия - щедрая душа, занимает 20 символов+нулевой символ окончания = 21.
Теперь происходит такое условие: "Пока 21(тоесть start) < 20(end)".
Как может 21 быть меньше 20,ведь тогда цикл прекратится сразу.
Как это понимать?
Golovastik вне форума Ответить с цитированием
Старый 08.09.2009, 21:26   #4
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Берём строку: "привет"
сначала start указывает на букву п, а end - на букву т. меняем их местами, получаем тривеп. потом start указывает на р, а end - на е, опять меняем местами и получаем теиврп. потом так же меняем и и в местами: тевирп. потом start указывает на и, а end - на в. Но условие start < end уже не выполняется, т.к. start получается правее, чем end (если непонятно почему, читайте про размещение массивов в памяти и арифметику указателей). Условие не выполняется - значит цикл заканчивается, т.е. строка перевёрнута.
pu4koff вне форума Ответить с цитированием
Старый 08.09.2009, 21:53   #5
Golovastik
Заблокирован
 
Регистрация: 25.05.2009
Сообщений: 284
По умолчанию

Наконец-то сообразил, спасибо pu4koff

Последний раз редактировалось Golovastik; 08.09.2009 в 22:40.
Golovastik вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Количество строк delphin100 Общие вопросы Delphi 2 26.03.2009 11:58
соединение строк ShenDy Общие вопросы C/C++ 4 21.01.2009 15:12
Матрица A состоит из 8 строк и 6 столбцов. вычесть из всех её строк, начиная со второй, первую строку Dimak24 Помощь студентам 1 19.12.2008 15:45
удаление строк Dime_x Microsoft Office Excel 2 07.10.2008 13:38
Excel max 256 строк VS user надо 300 строк Exo Microsoft Office Excel 3 10.01.2008 17:14