Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RFpro.ru: Программирование на C / C++


Хостинг портала RFpro.ru:
Московский хостер
Профессиональный платный хостинг на базе Windows 2008

РАССЫЛКИ ПОРТАЛА RFPRO.RU

Чемпионы рейтинга экспертов в этой рассылке

_Ayl_
Статус: Студент
Рейтинг: 1450
∙ повысить рейтинг »
Boriss
Статус: Академик
Рейтинг: 1336
∙ повысить рейтинг »
Micren
Статус: Бакалавр
Рейтинг: 1196
∙ повысить рейтинг »

/ КОМПЬЮТЕРЫ И ПО / Программирование / C/C++

Номер выпуска:1441
Дата выхода:10.12.2009, 01:00
Администратор рассылки:Dr_Andrew, Старший модератор
Подписчиков / экспертов:675 / 182
Вопросов / ответов:1 / 1
IRC-канал по теме:#C

Вопрос № 174872: Доброго времени суток! Друзья,подскажите вот есть один проект(код в приложении) написанный в Visual C++,идея и принцип работы его такие - вводится строка(не более 256 элементов) состоящая из л...



Вопрос № 174872:

Доброго времени суток! Друзья,подскажите вот есть один проект(код в приложении) написанный в Visual C++,идея и принцип работы его такие - вводится строка(не более 256 элементов) состоящая из любых символов и по команде пользователя переворачивается,т.е 1-ый символ становится последним и т.д. в целом работает нормально,но
1.Почему-то если ввести более 127 элементов - перевёрнутая строка выглядит как "ННННННННННННННН..."
2.А так же отказывается переворачивать строку из ровно 256 символов программа отказывается переворачивать строку,255 нормально,257 - выдаёт сообщение об ошибке,как и должно быть.

Отправлен: 04.12.2009, 20:46
Вопрос задал: Roma2010, 4-й класс
Всего ответов: 1
Страница вопроса »


Отвечает 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 (Россия) | Еще номера »
  • Отправить WebMoney:
  • Вам помогли? Пожалуйста, поблагодарите эксперта за это!


    Оценить выпуск »
    Нам очень важно Ваше мнение об этом выпуске рассылки!

    Задать вопрос экспертам этой рассылки »

    Скажите "спасибо" эксперту, который помог Вам!

    Отправьте СМС-сообщение с тестом #thank НОМЕР_ОТВЕТА
    на короткий номер 1151 (Россия)

    Номер ответа и конкретный текст СМС указан внизу каждого ответа.

    Полный список номеров »

    * Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи. (полный список тарифов)
    ** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
    *** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.


    © 2001-2009, Портал RFpro.ru, Россия
    Авторское право: ООО "Мастер-Эксперт Про"
    Автор: Калашников О.А. | Программирование: Гладенюк А.Г.
    Хостинг: Компания "Московский хостер"
    Версия системы: 2009.6.12 от 30.11.2009

    В избранное