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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.03.2019, 09:00   #1
iamuran
Новичок
Джуниор
 
Регистрация: 07.03.2019
Сообщений: 1
По умолчанию что не так с массивом символов?

Наткнулся на задачу реверса строки и проверил вот такой финт ушами:

Код:
#include <iostream>

using namespace std;

int main(int argc, char** argv) {
	//string str="Hello";
	char chr[]={'H','e','l','l','o'};
	string rev;
	//int sz=str.size();
	int sz=sizeof(chr);
	for(int i=0;i<sz;i++){
		//rev=str[i]+rev;
		cout << chr[i];
		rev=chr[i]+rev;
	}
	cout << endl << rev << endl;
	return 0;
}
Для string и для массива символов был получен одинаковый результат.
Сразу скажу, что писалось в Dev-C++, собиралось с TDM-GCC 4.9.2 64-bit Release
Т.е. обычно я просто вычисляю обратный индекс и все (sz-1-i) и получаю результат, но тут то-же самое, только не могу понять, как? На лицо экономия на операциях или это и так происходит?

Последний раз редактировалось Аватар; 07.03.2019 в 09:12.
iamuran вне форума Ответить с цитированием
Старый 07.03.2019, 09:18   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

0 'Helloh' 'H'
1 'Helloh' 'eH'
2 'Helloh' 'leH'
...
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 07.03.2019, 09:23   #3
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,543
По умолчанию

Код:
	rev=chr[i]+rev;
и
Код:
	rev=rev+chr[i];
"наращивание" строки с начала(+ rev) и с конца (rev +)
в написании кода м.б. и выигрыш.
а вот в выполнении..? перезапись ВСЕЙ строки в новую память!
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 07.03.2019, 11:03   #4
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,833
По умолчанию

Только зачем все это?
Код:
#include <iostream>

int main(int argc, char** argv) {
	char chr[]={'H','e','l','l','o'};
	string rev(std::rbegin(chr), std::rend(chr));
	std::cout << '\n' << rev << std::endl;
}
p51x вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[C++] В чем преимущества строки перед массивом символов? Borodatiy noname Помощь студентам 2 30.11.2016 10:46
Работа с массивом/строкой символов, преобразование символа с число. (Pascal, Delphi) Савва Помощь студентам 8 29.01.2012 12:27
Что делать, если количество символов в билдере не соответствует количеству символов в билде? BoT_T Общие вопросы Delphi 0 16.11.2010 10:42
Работа с массивом символов (строкой) deathz0r Помощь студентам 2 04.06.2010 22:22
Помогите с двумерным массивом символов Anvilion Помощь студентам 1 18.01.2009 01:59