Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 15, средняя оценка - 4.73
larry
0 / 0 / 0
Регистрация: 27.07.2009
Сообщений: 59
#1

не работает функция isupper() - C++

31.07.2009, 10:17. Просмотров 1897. Ответов 12
Метки нет (Все метки)

Доброе утро!У меня в программе не работает функция isupper():
C++
1
2
3
4
5
for(int index = 0; index < strlen(str); index++)
{
if(isupper(*(str+index)))
count_symbol++;
}
При компиляции все нормально,ошибок нет,но после запуска останавливается программа и появляется окно с ошибкой Expressionunsigned)(c+1) <= 256....

И еще такой вопрос: почему компилятор vislual studio 2005 выдает предупреждение при использовании strcpy, strcat...пишет что нужно использовать strcpy_s, strcat_s...из-за того что там идет проверка на переполнение буфера?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zim22
depict1
 Аватар для zim22
276 / 141 / 2
Регистрация: 11.07.2009
Сообщений: 606
31.07.2009, 10:20     не работает функция isupper() #2
Цитата Сообщение от larry Посмотреть сообщение
появляется окно с ошибкой Expressionunsigned)(c+1) <= 256.
символ, который в текущий момент поступает на вход функции isupper является некорректным. и невозможно осуществить его анализ.
larry
0 / 0 / 0
Регистрация: 27.07.2009
Сообщений: 59
31.07.2009, 10:34  [ТС]     не работает функция isupper() #3
это может быть из-за использования русского шрифта?
Как это устранить?

Добавлено через 2 минуты 35 секунд
только что проверил...и точно она так реагирует на русский язык...Тогда остается вопрос как это обойти?Может есть еще какие-нибудь функции...скажем в winapi?
zim22
depict1
 Аватар для zim22
276 / 141 / 2
Регистрация: 11.07.2009
Сообщений: 606
31.07.2009, 10:37     не работает функция isupper() #4
Цитата Сообщение от larry Посмотреть сообщение
Тогда остается вопрос как это обойти?
напишите свою функцию. для анализа русских букв.
larry
0 / 0 / 0
Регистрация: 27.07.2009
Сообщений: 59
31.07.2009, 10:43  [ТС]     не работает функция isupper() #5
Спасибо

Добавлено через 31 секунду
будем работать над этим...
odip
Эксперт С++
 Аватар для odip
7151 / 3291 / 59
Регистрация: 17.06.2009
Сообщений: 14,164
01.08.2009, 14:13     не работает функция isupper() #6
str - это что ?
Полный код покажи.
zim22
depict1
 Аватар для zim22
276 / 141 / 2
Регистрация: 11.07.2009
Сообщений: 606
01.08.2009, 15:39     не работает функция isupper() #7
Цитата Сообщение от odip Посмотреть сообщение
str - это что ?
вероятней всего - это строка.
odip
Эксперт С++
 Аватар для odip
7151 / 3291 / 59
Регистрация: 17.06.2009
Сообщений: 14,164
01.08.2009, 15:42     не работает функция isupper() #8
Надо не вероятнее всего, а что именно он там написал
zim22
depict1
 Аватар для zim22
276 / 141 / 2
Регистрация: 11.07.2009
Сообщений: 606
01.08.2009, 16:05     не работает функция isupper() #9
Цитата Сообщение от odip Посмотреть сообщение
Надо не вероятнее всего, а что именно он там написал
можно и так додуматься.
C++
1
2
3
4
5
6
7
8
9
10
11
#include <cstring>
#include <cctype>
 
int main()
{
  char *str = "Привет";
  int count_symbol = 0;
 
  for(int index = 0; index < strlen(str); index++)
    if(isupper(*(str+index))) count_symbol++;   
}
odip
Эксперт С++
 Аватар для odip
7151 / 3291 / 59
Регистрация: 17.06.2009
Сообщений: 14,164
01.08.2009, 16:27     не работает функция isupper() #10
Тогда правильно будет так. Находит заглавную русскую букву "П" в слове "Привет".

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <cstring>
#include <cctype>
#include <iostream>
 
int main( void ) {
 
char *str = "Привет";
int count_symbol = 0;
 
 
setlocale( LC_ALL, "" ); 
 
for( int index = 0; index < strlen(str); index++ ) {
    if ( isupper( (unsigned char)str[index] ) ) { count_symbol++; }
}
 
std::cout <<"count_symbol= " <<count_symbol <<"\n";
 
} // main()
zim22
depict1
 Аватар для zim22
276 / 141 / 2
Регистрация: 11.07.2009
Сообщений: 606
01.08.2009, 17:26     не работает функция isupper() #11
odip, интересно, не знал, что isuppper работает для русского алфавита.
но лучше так:
C++
1
2
3
4
5
6
_locale_t locale = _create_locale(LC_ALL, "Russian_Russia.1251");
 for( int index = 0; index < strlen(str); index++ ) {  
   int letter = (unsigned char)str[index];        
   if ( _isupper_l(letter,  locale) ) { count_symbol++; }
 }
 _free_locale(locale);
odip
Эксперт С++
 Аватар для odip
7151 / 3291 / 59
Регистрация: 17.06.2009
Сообщений: 14,164
01.08.2009, 17:28     не работает функция isupper() #12
не знал, что isuppper работает для русского алфавита
Многие стандартные функции из ctype работают с локалью.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.05.2011, 15:08     не работает функция isupper()
Еще ссылки по теме:

C++ Не работает функция
Не работает функция if C++
Не работает функция C++
C++ Не работает функция
C++ Не работает функция

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
nazarevic
Сообщений: n/a
03.05.2011, 15:08     не работает функция isupper() #13
какой хедер для _locale_t? thanks.
Yandex
Объявления
03.05.2011, 15:08     не работает функция isupper()
Ответ Создать тему
Опции темы

Текущее время: 23:37. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru