IPB
ЛогинПароль:

> Внимание!

1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным. В описании темы указываем язык!!!

 
 Ответить  Открыть новую тему 
> Символ перевести в код, подскажите, пожалуйста
Triplet
сообщение 10.11.2007 12:19
Сообщение #1


Пионер
**

Группа: Пользователи
Сообщений: 78
Пол: Женский

Репутация: -  0  +


Задан одномерный массив, каждым элементом которого является строка символов. Если строка состоит из одних латинских букв, то заменить их на соответствующие коды и найти их среднее арифметическое.
Подскажите, пожалуйста, есть ли в С++ аналог паскалевских Ord() и chr(), и можно ли в C++ организовать конструкцию типа if a[i] in ['A'..'Z', 'a'..'z'] then...?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
klem4
сообщение 10.11.2007 12:50
Сообщение #2


Perl. Just code it!
******

Группа: Модераторы
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

Репутация: -  44  +


в CTYPE.H есть функция
int isalpha(int c);


ну а символ перевести в код можно простым приведением char к int (для отображаемых символов)



Сообщение отредактировано: klem4 - 10.11.2007 12:54


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Triplet
сообщение 10.11.2007 12:56
Сообщение #3


Пионер
**

Группа: Пользователи
Сообщений: 78
Пол: Женский

Репутация: -  0  +


Цитата(klem4 @ 10.11.2007 14:50) *

в CTYPE.H есть функция
int isalpha(int c);



isalpha проверяет, является ли символ буквой.
а мне надо найти именно латинские буквы и заменить их на коды.
у меня пока получилось только найти код символа
char k='S';
int z=k;// здесь код
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
klem4
сообщение 10.11.2007 13:02
Сообщение #4


Perl. Just code it!
******

Группа: Модераторы
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

Репутация: -  44  +


Цитата
именно латинские буквы и заменить их на коды.


ch = toupper(ch);
if ((ch >= 'A') && (ch <= 'Z'))
cout << "lat.";


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Triplet
сообщение 10.11.2007 13:18
Сообщение #5


Пионер
**

Группа: Пользователи
Сообщений: 78
Пол: Женский

Репутация: -  0  +


понятно, спасибо большое за ответ.
мне только не совсем понятно как в массиве строк, каждый символ заменить на код, т.к., если я присваиваю число, оно выводится как символ?


Сообщение отредактировано: Triplet - 10.11.2007 13:56
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Гость
сообщение 10.11.2007 13:53
Сообщение #6


Гость






Цитата(Triplet @ 10.11.2007 13:18) *

мне только не совсем понятно как в массиве строк, каждый символ заменить на код, т.к., если я присваиваю число, оно выводится как символ?
Думается мне, что ты пытаешься сделать то, что тебя не просят. Тебе сказано:
Цитата(Triplet @ 10.11.2007 12:19) *

Если строка состоит из одних латинских букв, то заменить их на соответствующие коды и найти их среднее арифметическое.
Что это значит? Если есть такая строка (только из латинских букв), то нужно просто подсчитать среднее арифметическое их кодов. Ставить коды на место букв никто не просит. "Заменить" здесь употреблено только чтоб было понятно, что складывать не буквы, а коды их..

Здесь был Lapp smile.gif))
 К началу страницы 
+ Ответить 
Triplet
сообщение 10.11.2007 13:56
Сообщение #7


Пионер
**

Группа: Пользователи
Сообщений: 78
Пол: Женский

Репутация: -  0  +


даже если и так smile.gif всё равно хотелось бы узнать ответ на мой вопрос.
лишней эта работа не будет
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Lapp
сообщение 10.11.2007 14:08
Сообщение #8


Уникум
*******

Группа: Модераторы
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Цитата(Triplet @ 10.11.2007 13:56) *

даже если и так smile.gif всё равно хотелось бы узнать ответ на мой вопрос.
лишней эта работа не будет

Это не работа. Никакой замены не будет. В машинном представлении символ есть код - он им был, им и останется. А что будет напечатано, зависит от того, как ты выводишь. Так что это просто твое недопонимание представления данных.
Повторяю: ничего не надо заменять. Просуммируй коды и пдели на их количество.

Твой последний вопрос типа такого:
- Кто выше летает - орел или крокодил?
- Крокодилы не летают!
- Ну, а если бы летали - то кто?
smile.gif
Ответ один: крокодилы не летают.


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 10.11.2007 15:21
Сообщение #9


Гость






Да в принципе и переводить-то ничего не надо, этим занимается неявное преобразование типов:

    char *s = "ABCD\0";
int sum = 0;

for(char *p = s; *p; *p++) sum += *p;
cout << sum << endl;


Что будет в результате?
 К началу страницы 
+ Ответить 
Triplet
сообщение 10.11.2007 15:58
Сообщение #10


Пионер
**

Группа: Пользователи
Сообщений: 78
Пол: Женский

Репутация: -  0  +


всё понятно, большое спасибо за ответы

 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 27.04.2024 19:31
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"