Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/6: Рейтинг темы: голосов - 6, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 26.01.2014
Сообщений: 7
1

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

26.01.2014, 14:45. Показов 1242. Ответов 14
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Есть код к заднию , но он не правильно показывает данные - киррилицу не ищет а латиницу больше выводит...

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


Код:
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");
 
 
 
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.01.2014, 14:45
Ответы с готовыми решениями:

В строке подсчитать количество цифр и количество заглавных латинских букв
Условие: Дана строка: 1.Подсчитать количество содержащихся в ней цифр. 2.Подсчитать количество...

Строка: Подсчитать и вывести на экран количество слов и количество всех букв в предложении,а также количество букв 'b'.
Считать предложение из файла .Слова разделены двумя пробелами. Подсчитать и вывести на экран...

После ввода с клавиатуры произвольного строки определить и вывести на экран количество латинских букв в нем
После ввода с клавиатуры произвольной строки определить и вывести на экран количество латинских...

Создать текстовый файл. Подсчитать количество цифр в нем. Вывести на экран предложения, содержащие цифры
Создать текстовый файл. Подсчитать количество цифр в нем. Вывести на экран предложения, содержащие...

14
244 / 245 / 38
Регистрация: 08.04.2013
Сообщений: 927
26.01.2014, 14:54 2
Черкасов, когда в файле есть кириллица, он сохраняется с кодировкой ANSI(если это в винде). Для правильной работы надо использовать wide потоки(wifstream) и wide строки(wstring). Если же все же не хотите с ними морочиться, то сохраните Ваш файл с кодировкой UTF-8
1
0 / 0 / 0
Регистрация: 26.01.2014
Сообщений: 7
26.01.2014, 15:16  [ТС] 3
не могли бы вы пожалуйста переписать код как правильно
или объяснить как его сохранить в utf - 8
0
244 / 245 / 38
Регистрация: 08.04.2013
Сообщений: 927
26.01.2014, 16:50 4
извиняюсь, немного ошибся. напишите в начале мейна
C++
1
locale::global(locale(""));
вместо
C++
1
setlocale(LC_ALL, "rus");
у меня работает.
и правильно напишите диапазон значений чара. Русские символы начинаются со 198 кода,а не со 128(источник)
1
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");
 
 
 
}
0
150 / 137 / 35
Регистрация: 29.07.2012
Сообщений: 709
26.01.2014, 23:41 6
Цитата Сообщение от Черкасов Посмотреть сообщение
но латинские на 1 больше показывает все равно...
Возможно ошибка в твоем подсчете, либо в этой строке if((a>=65)&&(a<=122)).
Лучше найди офф источник и точно узнай начало сим. кодов лат. символов.
1
5498 / 4893 / 831
Регистрация: 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++;
}
1
0 / 0 / 0
Регистрация: 26.01.2014
Сообщений: 7
26.01.2014, 23:51  [ТС] 8
Цитата Сообщение от alsav22 Посмотреть сообщение
Если так:
увы... все равно показывает 4 вместо 3
0
320 / 225 / 74
Регистрация: 22.11.2013
Сообщений: 865
Записей в блоге: 1
27.01.2014, 00:02 9
Цитата Сообщение от metaluga145 Посмотреть сообщение
у меня работает.
и правильно напишите диапазон значений чара. Русские символы начинаются со 198 кода,а не со 128(источник)
Не факт OEM866 посмотрите.
1
0 / 0 / 0
Регистрация: 26.01.2014
Сообщений: 7
27.01.2014, 00:06  [ТС] 10
Цитата Сообщение от Bend3r Посмотреть сообщение
Возможно ошибка в твоем подсчете, либо в этой строке if((a>=65)&&(a<=122)).
Лучше найди офф источник и точно узнай начало сим. кодов лат. символов.
http://images.yandex.ru/yandse... 0%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");
 
 
 
}
0
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
27.01.2014, 00:12 11
Цитата Сообщение от Черкасов Посмотреть сообщение
увы... все равно показывает 4 вместо 3
Содержимое файла покажите.
1
320 / 225 / 74
Регистрация: 22.11.2013
Сообщений: 865
Записей в блоге: 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");
 
 
 
}
2
5498 / 4893 / 831
Регистрация: 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++;
}
1
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");
 
 
 
}
0
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
27.01.2014, 03:28 15
Цитата Сообщение от Черкасов Посмотреть сообщение
Все понял - while (!F.eof()) поставил в другое место - верно?
А компилятор не ругается на такой код?
Цитата Сообщение от Черкасов Посмотреть сообщение
И как быть?
Как - написано в 7 посте.
0
27.01.2014, 03:28
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.01.2014, 03:28
Помогаю со студенческими работами здесь

Строки. Подсчитать количество заглавных букв в тексте; вывести на экран слова, имеющие наименьшее количество букв... (подправить)
Дано задачу: С клавиатуры вводится строка. Составить программу, которая подсчитывает количество...

Определить количество цифр и малых латинских букв в строке St
Ребят,выручайте никогда не сталкивался со строками, срочно нужно.Код нужен простой. Разработать...

Определить количество цифр и заглавных латинских букв в строке
Дана строка. Определить количество в ней: 1) заглавных букв латинского алфавита; 2) цифр

Ввести с клавиатуры положительное целое число А и вывести на экран количество его цифр, больших 6
Напишите следующую программу. Ввести с клавиатуры положительное целое число А и вывести на экран...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru