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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.09.2007, 23:08   #1
BattleMage
Пользователь
 
Регистрация: 19.09.2007
Сообщений: 11
Восклицание Сумма кодов строки - Borland C++Builder

Я понимаю, что это вопрос не по теме, но почему-то категории Borland C++Builder я не нашёл. Решил написать в этом разделе (Delphi), т.к. среды очень похожи, а программы не отличаются большой сложностью...

Подскажите плиз.
char *stroka;
unsigned int b, dlina;
//dlina- длина строки динамической строки stroka
//в строке stroka есть какой-то текст уже...
for (e=0;e<dlina;e++) s=s+stroka[e];

вот почему он не складывает коды символов тут? ну если слово "abc", то 97+98+99=294 и переменная s=294. в обычном си хорошо работает
BattleMage вне форума Ответить с цитированием
Старый 29.09.2007, 01:15   #2
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

наверное борланд считает как и в дельфи ) тобиш CHAR = chr(BYTE) - это символ а не число... а в си это число типа BYTE вот поэтому и не считает.. может быть я незнаю
BOBAH13 вне форума Ответить с цитированием
Старый 29.09.2007, 08:54   #3
studenth
Форумчанин
 
Регистрация: 10.09.2007
Сообщений: 105
По умолчанию

Все должно считаться. Все таки Си славится своими неявными преобразованиями. С делфи не сравнивать!
s какого типа? я что то не увидел....
Вот смотри, тупой пример в лоб:

int main(int argc, char* argv[])
{
char *s;
int summ = 0;
s = "abc";
for(int i=0; i<3; i++) summ+=s[i];
cout<<summ<<endl<<endl;
system("pause");
return 0;
}
все как нужно....в консоль выдает 294
Бог сделал людей разными, а генерал Кольт уравнял шансы
studenth вне форума Ответить с цитированием
Старый 29.09.2007, 13:06   #4
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

Цитата:
Вот смотри, тупой пример в лоб:
тебе же написали что в обычном Си без проблем
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог
mutabor вне форума Ответить с цитированием
Старый 29.09.2007, 13:42   #5
studenth
Форумчанин
 
Регистрация: 10.09.2007
Сообщений: 105
По умолчанию

Цитата:
Сообщение от mutabor Посмотреть сообщение
тебе же написали что в обычном Си без проблем
Я делал в C++ Builder 6.0
Бог сделал людей разными, а генерал Кольт уравнял шансы
studenth вне форума Ответить с цитированием
Старый 29.09.2007, 15:04   #6
BattleMage
Пользователь
 
Регистрация: 19.09.2007
Сообщений: 11
По умолчанию

"в консоль выдает 294" причем тут консоль? я формы использовал, кнопочки и прочее
BattleMage вне форума Ответить с цитированием
Старый 29.09.2007, 16:53   #7
studenth
Форумчанин
 
Регистрация: 10.09.2007
Сообщений: 105
По умолчанию

Цитата:
Сообщение от BattleMage Посмотреть сообщение
"в консоль выдает 294" причем тут консоль? я формы использовал, кнопочки и прочее
Я понимаю....но разницы не вижу.
Ибо компилятор для всех этих дел используется один и тот же.
Я попросил, покажи тип твоей s...ну на крайний случай, можешь использовать операцию явного приведения (int)....хотя она не нужна.

Ребята без нервов!
Говорю же все работает!
Бог сделал людей разными, а генерал Кольт уравнял шансы
studenth вне форума Ответить с цитированием
Старый 29.09.2007, 20:24   #8
BattleMage
Пользователь
 
Регистрация: 19.09.2007
Сообщений: 11
По умолчанию

Цитата:
Я понимаю....но разницы не вижу.
А я вижу.

Код такой:
char *stroka;
unsigned int e, b, dlina;
for (i=1;i<StringGrid3->RowCount;i++)
{
b=0;
dlina=strlen(StringGrid3->Cells[1][i].c_str());
stroka=(char*)malloc(dlina*sizeof(c har));
strcpy(stroka,StringGrid3->Cells[1][i].c_str());
for (e=0;e<dlina;e++) b=b+int(stroka[e]);
b=b%StringGrid3->RowCount;
if (StrToInt(StringGrid4->Cells[0][b])!=0) StringGrid3->Cells[3][StrToInt(StringGrid4->Cells[0][b])]=i;
else StringGrid4->Cells[0][b]=i;
free(stroka);
}

Тип переменной b - unsigned int
Прога работает, но если бы не было операции приведения типов... Теперь понял, чем отличается?
BattleMage вне форума Ответить с цитированием
Старый 30.09.2007, 05:54   #9
studenth
Форумчанин
 
Регистрация: 10.09.2007
Сообщений: 105
По умолчанию

Не совсем, потому как...
Вот вывод в Edit сработал без приведения типов...

char *s = "abc";
int sum = 0;
for(int i=0; i<3; i++) sum+=s[i];
Edit1->Text = sum;

Ересь какая то...
Попробуй сделать тоже самое? не требует приводить?
Бог сделал людей разными, а генерал Кольт уравнял шансы

Последний раз редактировалось studenth; 30.09.2007 в 06:08.
studenth вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите с курсовой borland с++ builder 6.0 Go6a Помощь студентам 5 14.11.2008 18:20
Что лучше Borland C++ Builder 6 или visualC# 2005??? ramfan Софт 2 17.04.2008 20:33
Borland C++Builder 2007 Sota Софт 1 14.03.2008 20:21
помогите с Borland C++ Builder 6.0 Enterprise Noor Софт 4 15.10.2007 14:13
Стоит ли мне изучать Borland C++ Builder? Mustang Свободное общение 18 14.10.2007 16:04