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

Не учитывать регистр - C++

Восстановить пароль Регистрация
 
Adept_Abdulova
0 / 0 / 0
Регистрация: 03.12.2012
Сообщений: 13
21.04.2013, 23:16     Не учитывать регистр #1
Надо чтобы программа считала текст из файла и подсчитала сколько раз встречаются разные буквы не учитывая регистра, т.е А=а б=Б. Я понимаю что можно сделать условия для каждой буквы, но как сделать это короче?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
iRomul
 Аватар для iRomul
158 / 99 / 11
Регистрация: 17.10.2012
Сообщений: 474
Завершенные тесты: 1
21.04.2013, 23:55     Не учитывать регистр #2
Функция tolower(int). Вы входной символ пропускаете через эту функцию и сравниваете её с маленькой буквой в программе. Т.е. идея такова, что работаете вы только с маленькими (ну или с большими, тогда вам в помощь функция toupper(int)) НО! Не работает с кириллицей, для этого нужно писать свою функцию.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
22.04.2013, 00:12     Не учитывать регистр #3
Цитата Сообщение от iRomul Посмотреть сообщение
НО! Не работает с кириллицей
Откуда такие данные?
iRomul
 Аватар для iRomul
158 / 99 / 11
Регистрация: 17.10.2012
Сообщений: 474
Завершенные тесты: 1
22.04.2013, 00:33     Не учитывать регистр #4
alsav22, выяснил у Шилдта. Но сейчас выяснил, что всё-таки при смене локали вроде как и поддержка появляется. Так ли это?
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
22.04.2013, 00:36     Не учитывать регистр #5
Цитата Сообщение от iRomul Посмотреть сообщение
Так ли это?
Если локаль выставить, то работает.
UnsKneD
алкокодер
 Аватар для UnsKneD
153 / 149 / 11
Регистрация: 27.12.2012
Сообщений: 548
22.04.2013, 00:50     Не учитывать регистр #6
Можно так, я спрячу под спойлер, если вам интересно написать самому.
Кликните здесь для просмотра всего текста

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <cstdio>
 
int main(){
    char small[]="abcdefghiklmnopqrstvxyz";
    char big[]="ABCDEFGHIKLMNOPQRSTVXYZ";
 
    int count[sizeof(small)]={0};
    char text[]="AaBbCcDdQPos";
 
    for(int i = 0; text[i]!='\0'; i++){
        for( int j = 0; big[j]!='\0'; j++){
            if( text[i] == big[j] || text[i] == small[j] ){
                count[j]++;
            }
        }
    }
 
    for(int i = 0; big[i]!='\0'; i++){
        printf("%c %d\n", big[i], count[i]);
    }
    
    return 0;
};
Olivеr
 Аватар для Olivеr
411 / 407 / 13
Регистрация: 06.10.2011
Сообщений: 830
22.04.2013, 01:23     Не учитывать регистр #7
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <algorithm>
#include <iterator>
#include <fstream>
 
using namespace std;
 
bool alpha(char c)
{   return isalpha(c);  }
 
int main()
{
    ifstream file("file.txt");
    if (!file)
        return -1;
    unsigned alphaCount = count_if(istream_iterator<char>(file), istream_iterator<char>(), alpha);
    cout << alphaCount;
    return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.04.2013, 11:57     Не учитывать регистр
Еще ссылки по теме:

Дата не високосного года (31 декабря не учитывать). Вывести дату завтрашнего дня C++
Не учитывать перевод строки в регулярном выражении C++
C++ Депозитный калькулятор - как учитывать високосные года?

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

Или воспользуйтесь поиском по форуму:
DiffEreD
 Аватар для DiffEreD
1420 / 757 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
22.04.2013, 11:57     Не учитывать регистр #8
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <iostream>
#include <fstream>
#include <set>
#include <algorithm>
#include <iterator>
 
struct comp
{
    bool operator()(const char lhs, const char rhs)
    {
        return tolower(lhs) != tolower(rhs);
    }
};
 
int main() 
{
    setlocale (0, "Russian");
    
    std::ifstream ifs("D:/file.txt");
    if (ifs.is_open())
    {
        std::set<char, comp> chars;
        std::copy_if(std::istreambuf_iterator<char>(ifs), std::istreambuf_iterator<char>(),
                std::inserter(chars, chars.begin()), isalpha);
        
        std::cout<<"Result: "<<chars.size()<<"\n";
    }
    else
        std::cout<<"Error opening file.\n";
    
    return 0;
}
Yandex
Объявления
22.04.2013, 11:57     Не учитывать регистр
Ответ Создать тему
Опции темы

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