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

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

Войти
Регистрация
Восстановить пароль
 
Crazy D
0 / 0 / 0
Регистрация: 19.03.2013
Сообщений: 13
#1

Посчитать количество пробелов в тексте - C++

27.10.2013, 20:44. Просмотров 959. Ответов 10
Метки нет (Все метки)

Помогите c задачей вот написал код,а он из за строки cout<<k<<endl; выкидывает ошибку

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
#include "stdafx.h"
#include<iostream>
using namespace std;
 
 
int _tmain(int argc, _TCHAR* argv[])
{
    system("Color F0");
    setlocale(LC_ALL,"rus");
    int i,x,k=0;
    char mas[100],buf[100],ch='c';
    cout<<"Исходный массив:"<<endl;
    FILE*f;
    f=fopen("f.txt","r");
    for(i=0;i<100;i++)
    {
        mas[i]=fgetc(f);
        if(mas[i]==EOF) break;
        cout<<mas[i];
    }
    for(i=0;i<100;i++)
    {
        if(mas[i]==' ')
            k++;
    }
cout<<k<<endl;  
cout<<endl;
    fclose(f);
    system("pause");
return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.10.2013, 20:44     Посчитать количество пробелов в тексте
Посмотрите здесь:
Посчитать количество пробелов в строке C++
Посчитать количество пустых промежутков - пробелов и табуляций C++
Строки: посчитать количество символов без пробелов C++
C++ Посчитать количество символов без пробелов в каждом предложении
C++ В строке посчитать наибольшее количество идущих подряд пробелов
Подсчитать наибольшее количество подряд идущих пробелов в тексте C++
C++ Посчитать количество знаков препинания в тексте и вывести их количество.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
newbie666
Заблокирован
27.10.2013, 20:48     Посчитать количество пробелов в тексте #2
Цитата Сообщение от Crazy D Посмотреть сообщение
cout<<k<<endl; выкидывает ошибку
какую ошибку? вроде нет ошибки
kventin_zhuk
БНТУ ФИТР
215 / 155 / 15
Регистрация: 26.12.2012
Сообщений: 382
27.10.2013, 20:55     Посчитать количество пробелов в тексте #3
Crazy D, ошибка в чем-то другом Вы очень криво проверяете конец файла, зачем вообще вам тут массивы?

C++
1
2
3
4
5
6
7
8
if (!f)
            return 0;
    while (!feof(f))
    {
        ch = fgetc(f);
        if (ch == ' ')
            k++;
    }
как-то так
Crazy D
0 / 0 / 0
Регистрация: 19.03.2013
Сообщений: 13
28.10.2013, 16:33  [ТС]     Посчитать количество пробелов в тексте #4
так препод.говорил делать по программированию,я это делал по его примеру
Somebody
2786 / 1600 / 145
Регистрация: 03.12.2007
Сообщений: 4,189
Завершенные тесты: 1
28.10.2013, 18:29     Посчитать количество пробелов в тексте #5
Цитата Сообщение от kventin_zhuk Посмотреть сообщение
C++
1
2
3
4
5
6
    while (!feof(f))
    {
        ch = fgetc(f);
        if (ch == ' ')
            k++;
    }
EOF не равен пробелу, поэтому здесь всё равно, но в общем случае криво получается как раз при такой проверке, потому что на последней итерации в ch будет EOF.

Добавлено через 4 минуты
P. S.
C++
1
2
3
4
5
6
7
8
9
10
11
#include <algorithm>
#include <fstream>
#include <iostream>
 
using namespace std;
 
int main()
{
    ifstream f("f.txt");
    cout << count(istreambuf_iterator<char>(f), istreambuf_iterator<char>(), ' ') << endl;
}
Anton_Kretov
89 / 51 / 7
Регистрация: 26.06.2013
Сообщений: 179
28.10.2013, 18:50     Посчитать количество пробелов в тексте #6
Вот код, припилите сюда файловые потоки, и дело с концом.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
#include <cstdio>
 
using namespace std;
 
int main()
{
    char stringArray[100];
    gets(stringArray);
    int spacesInString = 0;
    for(int i = 0; stringArray[i]; i++) {
        if(stringArray[i] == ' ') spacesInString++;
    }
    cout << "Spaces: " << spacesInString;
    return 0;
}
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
29.10.2013, 01:52     Посчитать количество пробелов в тексте #7
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
#include "stdafx.h"
#include<iostream>
#include <fstream>
using namespace std;
 
int main()
{
    system("Color F0");
    setlocale(LC_ALL,"rus");
    int k = 0;
    char ch;
    FILE*f;
    
    f = fopen("f.txt","r");
    if (f)
    {
        while (1)
        {
            ch = fgetc(f);
            if (ch == EOF) break;
            if (ch == ' ') k++;
        }
        fclose(f);
        cout << k << endl;  
    }
    else cout << "Error!" << endl;
    
    system("pause");
    return 0;
}
rangerx
1931 / 1540 / 141
Регистрация: 31.05.2009
Сообщений: 2,908
29.10.2013, 14:12     Посчитать количество пробелов в тексте #8
Цитата Сообщение от alsav22 Посмотреть сообщение
char ch;
...
if (ch == EOF) break;
Так делать нельзя, fgetc не просто же так возвращает int. Если использовать char, то как отличать, например, EOF = -1 = FFFFFFFFh от символа с кодом FFh?
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
29.10.2013, 15:07     Посчитать количество пробелов в тексте #9
Пока не согласен. Пишется, что функция считывает символ, как unsigned char и преобразует в целое число. При обнаружении конца файла, возвращает константу EOF. Поэтому, я думаю, функция будет различать FF (как unsigned char) и конец файла. Символа конца файла, насколько я знаю, как такового, не существет. Сравнивается размер файла и количество считанных байтов. Или приведите данные в файле, при которых будет эта ошибка.
Somebody
2786 / 1600 / 145
Регистрация: 03.12.2007
Сообщений: 4,189
Завершенные тесты: 1
29.10.2013, 17:10     Посчитать количество пробелов в тексте #10
Цитата Сообщение от alsav22 Посмотреть сообщение
приведите данные в файле, при которых будет эта ошибка
Если в файле есть (char)EOF - это обычно 0xff - "я" в 1251.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.10.2013, 17:56     Посчитать количество пробелов в тексте
Еще ссылки по теме:
C++ В данном тексте вычислить наибольшее количество символов пробелов, расположенных подряд
Посчитать количество различных символов в тексте C++
Посчитать количество букв в заданном тексте C++
Посчитать в тексте количество удвоенных букв n C++
C++ Посчитать количество предложений в данном тексте

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

Или воспользуйтесь поиском по форуму:
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
29.10.2013, 17:56     Посчитать количество пробелов в тексте #11
Цитата Сообщение от Somebody Посмотреть сообщение
Если в файле есть (char)EOF - это обычно 0xff - "я" в 1251.
В текстовом файле? Как вы видите, что он есть и что из себя представляет?

Добавлено через 31 минуту
Цитата Сообщение от rangerx Посмотреть сообщение
Так делать нельзя, fgetc не просто же так возвращает int. Если использовать char, то как отличать, например, EOF = -1 = FFFFFFFFh от символа с кодом FFh?
Согласен, есть косяк. По-моему, он в том, что fgetc() считывает символ как unsigned char, но, при присвоении к знаковому char, приводит его к знаковому, поэтому символ с кодом FF будет приведён к -1, что равнозначно EOF. Если же сделать ch беззнаковым, то тогда EOF приведётся к FF и не будет выхода из чтения.

Добавлено через 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
#include "stdafx.h"
#include<iostream>
using namespace std;
 
 
int main()
{
    system("Color F0");
    setlocale(LC_ALL,"rus");
    int k = 0;
    char ch;
    FILE*f;
    
    f = fopen("f.txt","r");
    if (f)
    {
        while (1)
        {
            ch = fgetc(f);
            if (feof(f)) break;
            if (ch == ' ') k++;
        }
        fclose(f);
        cout << k << endl;  
    }
    else cout << "Error!" << endl;
    
    system("pause");
    return 0;
}
Yandex
Объявления
29.10.2013, 17:56     Посчитать количество пробелов в тексте
Ответ Создать тему
Опции темы

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