![]() |
|
| Правила Форума редакция от 22.06.2020 |
|
|||||||
|
|
Окажите посильную поддержку, мы очень надеемся на вас. Реквизиты для переводов ниже. |
|
![]() |
|
|
Опции темы | Опции просмотра |
Language
|
|
|
#1
|
|
Неактивный пользователь
Пол:
Регистрация: 18.03.2008
Сообщений: 6
Репутация: 0
|
Помогите с кодом плиз на си++ - я еще новичок не смог везде разобраться.
Задание: вводим пару предложений и программа должна сосчитать сколько заглавных букв в предложении. как это можно сделать? Пример если можно! ![]() спасибо! |
|
|
|
| Реклама: | otec галтовка | прокат стульев на свадьбу | mz7l33t8hblt 00a07 | клапан vd в интерфейсном клапане | Заходите на сайт MebelStol.ru: современные раскладушки - отличные цены и большой выбор! |
|
|
#2
|
|
Постоялец
![]() ![]() ![]() ![]() ![]() Пол:
Регистрация: 05.02.2007
Адрес: Москва
Сообщений: 662
Репутация: 271
|
Код:
char text[]="Aaaaaaaa Bbbbbbbb Ccccccc";
int n=0;
for(int i=0;i<strlen(text);i++)
if(text[i]>='A' && text[i]<='Z')
n++;
__________________
Сергей Сергеевич |
|
|
|
|
|
#3
|
|
Неактивный пользователь
Регистрация: 31.03.2008
Сообщений: 5
Репутация: 1
|
В предыдущем примере испльзуется функция strlen столько раз сколько букв в строке, а это стоит времени, достаточно использовать тот факт, что при такой инициализации строки, на конце ставиться знак о коде 0.
char tab[]="AaAaA bBbbbbbb Cccccc"; char *point=tab; int count=0; // счётчик while(*point!=0){ if ( (*(point)>='A') && (*(point)<='Z')){ ++count; } ++point; } |
|
|
|
|
|
#4
|
|
Новичок
Пол:
Регистрация: 08.09.2006
Сообщений: 28
Репутация: 2
|
И лаконичный код:
char tab[] = "AaAaA bBbbbbbb Cccccc"; int count = 0; for (char *point = tab; *point; ++point) { if ( ((*point) >= 'A') && ((*point) <= 'Z')) { ++count; } } |
|
|
|
|
|
#5
|
|
Неактивный пользователь
Пол:
Регистрация: 04.12.2007
Сообщений: 32
Репутация: 4
|
Код:
#include <stdio.h>
#include <ctype.h>
void main()
{
char Tab[] = "AaAaA bBbbbbbb Cccccc";
int ucl = 0;
int idx;
for (idx = 0; Tab[idx]; ++idx)
{
if (isalpha(Tab[idx]) && toupper(Tab[idx]) == Tab[idx])
ucl++;
}
printf("Found %d upper case letters.\n", ucl);
}
это не везде будет работать! |
|
|
|
| Сказали спасибо: |
|
|
#6
|
|
Неактивный пользователь
Пол:
Регистрация: 04.12.2007
Сообщений: 32
Репутация: 4
|
Вот ещё более простой вариант:
Код:
#include <stdio.h>
#include <ctype.h>
void main()
{
char Tab[] = "AaAaA bBbbbbbb Cccccc";
int ucl = 0;
int idx;
for (idx = 0; Tab[idx]; ++idx)
{
if ( isupper(Tab[idx]) )
ucl++;
}
printf("Found %d upper case letters.\n", ucl);
}
|
|
|
|
|
|
#7
|
|
Неактивный пользователь
Регистрация: 25.05.2007
Сообщений: 13
Репутация: 3
|
|
|
|
|
|
|
#8
|
|
Неактивный пользователь
Пол:
Регистрация: 04.12.2007
Сообщений: 32
Репутация: 4
|
Хороший вопрос.. Но что то я не припомню что бы в домашних работах по программированию просили отнестись к юникоду тем более для начинающих, а вы?
|
|
|
|
|
|
#9
|
|||||||||||||||||||||||
|
Неактивный пользователь
Регистрация: 25.05.2007
Сообщений: 13
Репутация: 3
|
Полностью согласен! Но если вместо строки: if(text[i]>='A' && text[i]<='Z') начинающий напишет: if((text[i]>='A' && text[i]<='Z')||(text[i]>='А' && text[i]<='Я')) - это ему зачтется. Разработка алгоритма - это искуство, а кодирование - ремесло. |
|||||||||||||||||||||||
|
|
|
|
|
#10
|
|
Неактивный пользователь
Пол:
Регистрация: 04.12.2007
Сообщений: 32
Репутация: 4
|
Я не совсем понимаю что вы имеете ввиду "зачтёться" но эта проверка на определённых машинах не верна.. для этого есть функции типа isalpha и скорее всего я думаю есть их аналоги для юникода..
|
|
|
|
|
|
#11
|
||||||||||||||||||||||||||||||||||||||||||||||
|
Неактивный пользователь
Регистрация: 25.05.2007
Сообщений: 13
Репутация: 3
|
"Зачтется" - это значит преподаватель поставит более высокую оценку за решение с дополнительной проверкой, но это не значит, что он не оценит более оптимальный код.
А вот здесь по подробнее! Например! ![]() Строка: if((text[i]>='A' && text[i]<='Z')||(text[i]>='А' && text[i]<='Я')) "прокатит" даже для 8-ми разраядных микроконтроллеров с объемом памяти команнд 2 кбайта. |
||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
|
|
#12
|
|
Неактивный пользователь
Пол:
Регистрация: 04.12.2007
Сообщений: 32
Репутация: 4
|
Такие конструкции, как: if (('a' <= c && c <= 'z') || ('A' <= c && c <= 'Z')) не эффективны, не говоря уже о нудности их написания и большой вероятности ошибок (На машинах с символьным набором EBCDIC через это сравнение пройдут и не алфовитные символы).
|
|
|
|
|
|
#13
|
|
Новичок
![]() Пол:
Регистрация: 08.08.2006
Адрес: Киев
Сообщений: 13
Репутация: 2
|
Предлагаю заменить знаки ">=" и "<=" на знаки "<" и ">", с замей букв до и после. Конечно более непонятно. Но эти операции по тактам процессора выполняются быстрее.
|
|
|
|
|
|
#14
|
|
Новичок
Пол:
Регистрация: 15.10.2008
Сообщений: 10
Репутация: 0
|
Перевести все слова в строчные буквы и посчитать количество несовпадений.
|
|
|
|
|
|
#15
|
|||||||||||||||||||||||
|
Постоялец
![]() ![]() ![]() ![]() ![]() Пол:
Регистрация: 05.02.2007
Адрес: Москва
Сообщений: 662
Репутация: 271
|
А как Вы это собираетесь сделать?
__________________
Сергей Сергеевич Последний раз редактировалось zss; 18.10.2008 в 20:20.. |
|||||||||||||||||||||||
|
|
|
![]() |
Похожие темы
|
||||
| Тема | Автор | Раздел | Ответов | Последнее сообщение |
| Сложи свой ник из японских букв! | ilia | Архив Юмора | 418 | 25.07.2016 17:57 |
| Сколько км проходит двигатель просле расточки, а сколько если ему поменять кольца | TankoSP | Автосервис | 40 | 21.02.2014 12:46 |
| Изменить расположение букв на клавиатуре? | xxxpirat | Mac Os X | 10 | 02.06.2011 22:48 |
| Как сосчитать одинаковые записи в БД. | hack | Delphi | 6 | 17.02.2010 11:36 |
| Помогите(сдавать срочно)-Сосчитать Гласные и Согласные в словах(код внутри) | XXXAlex | Visual C++ / С/C++ | 6 | 03.05.2008 01:53 |
|
|