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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.07.2009, 12:40   #31
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Цитата:
Сообщение от pavelstraut Посмотреть сообщение
но внутри переменной чар хранится в данный момент число -126?
Внутри переменной char в данный момент хранится 1000 0010. Как интерпретировать его(-126, или 130) зависит от вызываемой ф-ции. Ф-ция вывода символа воспринимает его как беззнаковый, дабы вывести необходимый символ из аски-таблицы.
netrino вне форума Ответить с цитированием
Старый 27.07.2009, 12:45   #32
pavelstraut
Пользователь
 
Регистрация: 17.07.2009
Сообщений: 91
По умолчанию

спасибо теперь понял
а если я допусти пишу так
mas[s1[i]]=mas[s1[i]]+1;
т.е увеличиваю значение элемента массива соответсвующего данному символу
тогда он попытается увеличить mas[-126] которого нет?
pavelstraut вне форума Ответить с цитированием
Старый 27.07.2009, 12:56   #33
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Честно говоря не понял Ваш вопрос... индексом массива может выступать только беззнаковые числа, соответственно все они именно так и интерпретируются
netrino вне форума Ответить с цитированием
Старый 27.07.2009, 13:07   #34
pavelstraut
Пользователь
 
Регистрация: 17.07.2009
Сообщений: 91
По умолчанию

вот смотрите в массиве mas хранятся частоты использования символов
при встрече очередного символа я добавляю единицу к частоте этого символа
mas[s1[i]]=mas[s1[i]]+1;(s1-массив символов.i-параметр цикла)
но почему то при работе с русскими буквами он неправильно интерепретирует s1[i]
а если добавить вот такую заплатку
int k=s1[i];
if(k<0) k=k+256;
тогда правильно выводит
почему без заплатки работает неверно
pavelstraut вне форума Ответить с цитированием
Старый 27.07.2009, 13:37   #35
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Так, всё, разобрался. Я ошибался, массив может иметь отрицательный индекс Этот пример наглядно иллюстрирует, что именно происходит:
Код:
#include <iostream>

using namespace std;

int main()
{
	char mas[123];       // Объявили массив
	char *n = &mas[34];  // Передали в n ссылку на 34 элемент массива. Таким образом n[0] == mas[34]

	mas[33] = 0x34;      // 0x34 - код цифры 4 в аски-таблице
	cout << n[-1] << endl;  // Результат - выводится данные из ячейки перед n[0]
	
	return 0;
}
В вашем примере достаточно приводить тип к unsigned char, не обязательно дополнительно использовать переменную k.
Код:
mas[(unsgined char)s1[i]]=mas[(unsigned char)s1[i]]+1; // Хотя смотрится это так себе ))
netrino вне форума Ответить с цитированием
Старый 27.07.2009, 13:56   #36
pavelstraut
Пользователь
 
Регистрация: 17.07.2009
Сообщений: 91
По умолчанию

т.е. массив может быть с отрицательными индексами и когда видит mas[s1[i]] он s1[i] интерпретирует как число со знаком
pavelstraut вне форума Ответить с цитированием
Старый 27.07.2009, 14:11   #37
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Цитата:
Сообщение от pavelstraut Посмотреть сообщение
т.е. массив может быть с отрицательными индексами и когда видит mas[s1[i]] он s1[i] интерпретирует как число со знаком
Да, именно так )
netrino вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Кто поможет оптимизировать прогу, а то я уже оптимизировал как мог :) Droid Помощь студентам 7 12.05.2008 20:56
Находжение разницы годов в SQL запросе Yurk@ БД в Delphi 13 01.03.2008 09:32
как сделать что бы пользователь мог изменять пароль и вводить свой? Илюха Общие вопросы Delphi 13 05.10.2007 14:58
не могу понять... Dutchman Паскаль, Turbo Pascal, PascalABC.NET 4 14.12.2006 07:14