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

Создать файл, ввести символы, вывести на экран количество не латинских букв, количество цифр - C++

Восстановить пароль Регистрация
 
Черкасов
0 / 0 / 0
Регистрация: 26.01.2014
Сообщений: 7
26.01.2014, 14:45     Создать файл, ввести символы, вывести на экран количество не латинских букв, количество цифр #1
Есть код к заднию , но он не правильно показывает данные - киррилицу не ищет а латиницу больше выводит...

Задание: Создать текстовый файл ввести кириллическиее латинские и другие символы..но не менее трех строк..извлечь на экран количество не латинских букв, количество цифр.


Код:
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
33
34
35
36
37
38
#include <iostream>
#include <locale>
#include <fstream>
#include <iomanip>
#include <stdlib.h>
using namespace std;
 
void main()
{
setlocale(LC_ALL, "rus");
char a;
int cifr=0,simvLat=0,simvKir=0;
cout << "Открытие файла....."<<endl;
ifstream F("fail-text.txt");
F.open("C:\\1.txt", ios::in);
if(!F)(cout <<"Файл не открыт!"<< endl);
else
while (!F.eof())
{
F>>a;
if((a>=48)&&(a<=57))
cifr++;
if((a>=65)&&(a<=122))
simvLat++;
if((a>=128)&&(a<=175))
simvKir++;
}
cout << "Цифр в файле:"<< cifr <<endl;
cout << "Латинских символов в файле:" <<simvLat<<endl;
cout << "Кириллических символов в файле:"<< simvKir << endl;
 
 
F.close();
system("pause");
 
 
 
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.01.2014, 14:45     Создать файл, ввести символы, вывести на экран количество не латинских букв, количество цифр
Посмотрите здесь:

C++ Дан текстовый файл. Вывести на экран количество предложений в нём и количество слов в каждом предложении.
C++ Ввести строку А с клавиатуры, содержащую арифметическое выражение. Подсчитать количество используемых цифр и букв.
C++ Дана строка. Подсчитать общее колличество прописных и строчных латинских и русских букв и вывести на консоль количество
C++ Дан текстовый файл. Вывести на экран количество предложений в нём и количество слов в каждом предложении
Строки. Подсчитать количество заглавных букв в тексте; вывести на экран слова, имеющие наименьшее количество букв... (подправить) C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
metaluga145
243 / 244 / 20
Регистрация: 08.04.2013
Сообщений: 927
26.01.2014, 14:54     Создать файл, ввести символы, вывести на экран количество не латинских букв, количество цифр #2
Черкасов, когда в файле есть кириллица, он сохраняется с кодировкой ANSI(если это в винде). Для правильной работы надо использовать wide потоки(wifstream) и wide строки(wstring). Если же все же не хотите с ними морочиться, то сохраните Ваш файл с кодировкой UTF-8
Черкасов
0 / 0 / 0
Регистрация: 26.01.2014
Сообщений: 7
26.01.2014, 15:16  [ТС]     Создать файл, ввести символы, вывести на экран количество не латинских букв, количество цифр #3
не могли бы вы пожалуйста переписать код как правильно
или объяснить как его сохранить в utf - 8
metaluga145
243 / 244 / 20
Регистрация: 08.04.2013
Сообщений: 927
26.01.2014, 16:50     Создать файл, ввести символы, вывести на экран количество не латинских букв, количество цифр #4
извиняюсь, немного ошибся. напишите в начале мейна
C++
1
locale::global(locale(""));
вместо
C++
1
setlocale(LC_ALL, "rus");
у меня работает.
и правильно напишите диапазон значений чара. Русские символы начинаются со 198 кода,а не со 128(источник)
Черкасов
0 / 0 / 0
Регистрация: 26.01.2014
Сообщений: 7
26.01.2014, 23:34  [ТС]     Создать файл, ввести символы, вывести на экран количество не латинских букв, количество цифр #5
Получилось только так
но латинские на 1 больше показывает все равно...

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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#include <iostream>
#include <locale>
#include <fstream>
#include <iomanip>
#include <stdlib.h>
using namespace std;
 
bool check_char(char source)
{
    char* check = "абвгдеёжзийклмнопрстуфхцчшщъыьэюяАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ";
    while(*check)
    {
        if(*check == source)
            return true;
        check++;
    }
    return false;       
}
 
 
void main()
{
locale::global(locale(""));
char a;
int cifr=0,simvLat=0,simvKir=0;
cout << "Открытие файла....."<<endl;
ifstream F("fail-text.txt");
F.open("D:\\1.txt", ios::in);
if(!F)(cout <<"Файл не открыт!"<< endl);
else
while (!F.eof())
{
F>>a;
if((a>=48)&&(a<=57))
cifr++;
if((a>=65)&&(a<=122))
simvLat++;
if(check_char(a))
simvKir++;
}
cout << "Цифр в файле:"<< cifr <<endl;
cout << "Латинских символов в файле:" <<simvLat<<endl;
cout << "Кириллических символов в файле:"<< simvKir << endl;
 
 
F.close();
system("pause");
 
 
 
}
Bend3r
 Аватар для Bend3r
142 / 129 / 17
Регистрация: 29.07.2012
Сообщений: 681
26.01.2014, 23:41     Создать файл, ввести символы, вывести на экран количество не латинских букв, количество цифр #6
Цитата Сообщение от Черкасов Посмотреть сообщение
но латинские на 1 больше показывает все равно...
Возможно ошибка в твоем подсчете, либо в этой строке if((a>=65)&&(a<=122)).
Лучше найди офф источник и точно узнай начало сим. кодов лат. символов.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
26.01.2014, 23:42     Создать файл, ввести символы, вывести на экран количество не латинских букв, количество цифр #7
Цитата Сообщение от Черкасов Посмотреть сообщение
но латинские на 1 больше показывает все равно...
Если так:
C++
1
2
3
4
5
6
7
8
9
10
11
while (true)
{
F>>a;
if (F.eof()) break;
if((a>=48)&&(a<=57))
cifr++;
if((a>=65)&&(a<=122))
simvLat++;
if(check_char(a))
simvKir++;
}
Черкасов
0 / 0 / 0
Регистрация: 26.01.2014
Сообщений: 7
26.01.2014, 23:51  [ТС]     Создать файл, ввести символы, вывести на экран количество не латинских букв, количество цифр #8
Цитата Сообщение от alsav22 Посмотреть сообщение
Если так:
увы... все равно показывает 4 вместо 3
mustimur
268 / 222 / 57
Регистрация: 22.11.2013
Сообщений: 832
Записей в блоге: 1
27.01.2014, 00:02     Создать файл, ввести символы, вывести на экран количество не латинских букв, количество цифр #9
Цитата Сообщение от metaluga145 Посмотреть сообщение
у меня работает.
и правильно напишите диапазон значений чара. Русские символы начинаются со 198 кода,а не со 128(источник)
Не факт OEM866 посмотрите.
Черкасов
0 / 0 / 0
Регистрация: 26.01.2014
Сообщений: 7
27.01.2014, 00:06  [ТС]     Создать файл, ввести символы, вывести на экран количество не латинских букв, количество цифр #10
Цитата Сообщение от Bend3r Посмотреть сообщение
Возможно ошибка в твоем подсчете, либо в этой строке if((a>=65)&&(a<=122)).
Лучше найди офф источник и точно узнай начало сим. кодов лат. символов.
http://images.yandex.ru/yandsearch?t...86%D0%B0+ascii

полно картинок везде от 65 до 122)

подсчет у меня точный - 3 буквы латинских а показывает 4.

Добавлено через 2 минуты
Цитата Сообщение от metaluga145 Посмотреть сообщение
извиняюсь, немного ошибся. напишите в начале мейна
C++
1
locale::global(locale(""));
вместо
C++
1
setlocale(LC_ALL, "rus");
у меня работает.
и правильно напишите диапазон значений чара. Русские символы начинаются со 198 кода,а не со 128(источник)

спасибо за подсказки , но все равно киррилица заработала ток с таким подходом :
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#include <iostream>
#include <locale>
#include <fstream>
#include <iomanip>
#include <stdlib.h>
using namespace std;
 
bool check_char(char source)
{
    char* check = "абвгдеёжзийклмнопрстуфхцчшщъыьэюяАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ";
    while(*check)
    {
        if(*check == source)
            return true;
        check++;
    }
    return false;       
}
 
 
void main()
{
locale::global(locale(""));
char a;
int cifr=0,simvLat=0,simvKir=0;
cout << "Открытие файла....."<<endl;
ifstream F("fail-text.txt");
F.open("D:\\1.txt", ios::in);
if(!F)(cout <<"Файл не открыт!"<< endl);
else
while (!F.eof())
{
F>>a;
if((a>=48)&&(a<=57))
cifr++;
if((a>=65)&&(a<=122))
simvLat++;
if(check_char(a))
simvKir++;
}
cout << "Цифр в файле:"<< cifr <<endl;
cout << "Латинских символов в файле:" <<simvLat<<endl;
cout << "Кириллических символов в файле:"<< simvKir << endl;
 
 
F.close();
system("pause");
 
 
 
}
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
27.01.2014, 00:12     Создать файл, ввести символы, вывести на экран количество не латинских букв, количество цифр #11
Цитата Сообщение от Черкасов Посмотреть сообщение
увы... все равно показывает 4 вместо 3
Содержимое файла покажите.
mustimur
268 / 222 / 57
Регистрация: 22.11.2013
Сообщений: 832
Записей в блоге: 1
27.01.2014, 00:13     Создать файл, ввести символы, вывести на экран количество не латинских букв, количество цифр #12
У Вас последний символ в файле 2 читается (он латинский), будь кириллица значит там ошибка была:
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#include <iostream>
#include <locale>
#include <fstream>
#include <iomanip>
#include <stdlib.h>
using namespace std;
 
bool check_char(char source)
{
    char* check = "абвгдеёжзийклмнопрстуфхцчшщъыьэюяАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ";
    while(*check)
    {
        if(*check == source)
            return true;
        check++;
    }
    return false;       
}
 
 
void main()
{
locale::global(locale(""));
char a;
int cifr=0,simvLat=0,simvKir=0;
cout << "Открытие файла....."<<endl;
ifstream F("fail-text.txt");
F.open("D:\\1.txt", ios::in);
if(!F)(cout <<"Файл не открыт!"<< endl);
else
do 
{
F>>a;
if((a>=48)&&(a<=57) && !F.eof())
cifr++;
if((a>=65)&&(a<=122)&& !F.eof())
simvLat++;
if(check_char(a)&& !F.eof())
simvKir++;
}
while(!F.eof());
 
cout << "Цифр в файле:"<< cifr <<endl;
cout << "Латинских символов в файле:" <<simvLat<<endl;
cout << "Кириллических символов в файле:"<< simvKir << endl;
 
 
F.close();
system("pause");
 
 
 
}
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
27.01.2014, 00:14     Создать файл, ввести символы, вывести на экран количество не латинских букв, количество цифр #13
При таком чтении, будет лишняя итерация:
C++
1
2
3
4
5
6
7
8
9
10
while (!F.eof())
{
F>>a;
if((a>=48)&&(a<=57))
cifr++;
if((a>=65)&&(a<=122))
simvLat++;
if(check_char(a))
simvKir++;
}
Черкасов
0 / 0 / 0
Регистрация: 26.01.2014
Сообщений: 7
27.01.2014, 00:47  [ТС]     Создать файл, ввести символы, вывести на экран количество не латинских букв, количество цифр #14
Цитата Сообщение от mustimur Посмотреть сообщение
У Вас последний символ в файле 2 читается (он латинский), будь кириллица значит там ошибка была:
Спасибо = заработало все отлично!) Удачи всем)

Добавлено через 3 минуты
Цитата Сообщение от alsav22 Посмотреть сообщение
При таком чтении, будет лишняя итерация:
И как быть?

Добавлено через 2 минуты
Все понял - while (!F.eof()) поставил в другое место - верно?
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#include <iostream>
#include <locale>
#include <fstream>
#include <iomanip>
#include <stdlib.h>
using namespace std;
 
bool check_char(char source)
{
    char* check = "абвгдеёжзийклмнопрстуфхцчшщъыьэюяАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ";
    while (*check)
    {
        if (*check == source)
            return true;
        check++;
    }
    return false;
}
 
 
void main()
{
    locale::global(locale(""));
    char a;
    int cifr = 0, simvLat = 0, simvKir = 0;
    cout << "Открытие файла....." << endl;
    ifstream F("fail-text.txt");
    F.open("c:\\1.txt", ios::in);
    if (!F)(cout << "Файл не открыт!" << endl);
    else
    do
    {
        while (!F.eof())
        F >> a;
        if ((a >= 48) && (a <= 57) && !F.eof())
            cifr++;
        if ((a >= 65) && (a <= 122) && !F.eof())
            simvLat++;
        if (check_char(a) && !F.eof())
            simvKir++;
    }
 
    cout << "Цифр в файле:" << cifr << endl;
    cout << "Латинских символов в файле:" << simvLat << endl;
    cout << "Кириллических символов в файле:" << simvKir << endl;
 
 
    F.close();
    system("pause");
 
 
 
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.01.2014, 03:28     Создать файл, ввести символы, вывести на экран количество не латинских букв, количество цифр
Еще ссылки по теме:

После ввода с клавиатуры произвольного строки определить и вывести на экран количество латинских букв в нем C++
Определить количество цифр и малых латинских букв в строке St C++
Пользователь вводит строку. Определить количество букв (рус eng), количество цифр и количество остальных C++

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

Или воспользуйтесь поиском по форуму:
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
27.01.2014, 03:28     Создать файл, ввести символы, вывести на экран количество не латинских букв, количество цифр #15
Цитата Сообщение от Черкасов Посмотреть сообщение
Все понял - while (!F.eof()) поставил в другое место - верно?
А компилятор не ругается на такой код?
Цитата Сообщение от Черкасов Посмотреть сообщение
И как быть?
Как - написано в 7 посте.
Yandex
Объявления
27.01.2014, 03:28     Создать файл, ввести символы, вывести на экран количество не латинских букв, количество цифр
Ответ Создать тему
Опции темы

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