Вопрос № 174872: Доброго времени суток! Друзья,подскажите вот есть один проект(код в приложении) написанный в Visual C++,идея и принцип работы его такие - вводится строка(не более 256 элементов) состоящая из л...
Вопрос № 174872:
Доброго времени суток! Друзья,подскажите вот есть один проект(код в приложении) написанный в Visual C++,идея и принцип работы его такие - вводится строка(не более 256 элементов) состоящая из любых символов и по команде пользователя переворачивается,т.е 1-ый символ становится последним и т.д. в целом работает нормально,но 1.Почему-то если ввести более 127 элементов - перевёрнутая строка выглядит как "ННННННННННННННН..." 2.А так же отказывается
переворачивать строку из ровно 256 символов программа отказывается переворачивать строку,255 нормально,257 - выдаёт сообщение об ошибке,как и должно быть.
Отвечает amnick, 6-й класс :
Здравствуйте, Roma2010.
все очень просто: причина в типе char в функции fun13
char len = strlen(str); .... for (char i = 0; i < len; i++) strResult[i] = str[len - i - 1];
замените его на int и все должно быть нормально: int len = strlen(str); .... for (int i = 0; i < len; i++) strResult[i] = str[len - i - 1];
А еще лучше, по-моему, написать вот так:
Код:
void fun13 (const char* str, char* strResult) { int len = strlen(str); strResult[len] = 0; char* p = strResult + len - 1; while( --len >= 0 ) *p-- = *str++; }
А для будущего, имейте в виду, что для индексов лучше использовать "родной" тип процессора, в C/C++ ему соответствует т
ип int. Любой другой тип при вычислении смещения все равно будет преобразовываться к int. Впрочем, хороший оптимизирующий компилятор вообще может убрать в таком выражении вычисление смещений и заменить его на операции с указателями.
Успехов!
Ответ отправил: amnick, 6-й класс
Ответ отправлен: 04.12.2009, 21:19
Оценка ответа: 5 Комментарий к оценке: ага, получилось! спасибо!
Как сказать этому эксперту "спасибо"?
Отправить SMS
#thank 257325
на номер 1151 (Россия) |
Еще номера »
Вам помогли? Пожалуйста, поблагодарите эксперта за это!
Оценить выпуск »
Нам очень важно Ваше мнение об этом выпуске рассылки!
* Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи.
(полный список тарифов)
** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
*** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.