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

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

Восстановить пароль Регистрация
 
Crazy D
0 / 0 / 0
Регистрация: 19.03.2013
Сообщений: 13
27.10.2013, 20:44     Посчитать количество пробелов в тексте #1
Помогите 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++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
newbie666
Заблокирован
27.10.2013, 20:48     Посчитать количество пробелов в тексте #2
Цитата Сообщение от Crazy D Посмотреть сообщение
cout<<k<<endl; выкидывает ошибку
какую ошибку? вроде нет ошибки
kventin_zhuk
БНТУ ФИТР
 Аватар для kventin_zhuk
214 / 154 / 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
2770 / 1583 / 141
Регистрация: 03.12.2007
Сообщений: 4,139
Завершенные тесты: 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
 Аватар для 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
5282 / 4801 / 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
1908 / 1517 / 139
Регистрация: 31.05.2009
Сообщений: 2,876
29.10.2013, 14:12     Посчитать количество пробелов в тексте #8
Цитата Сообщение от alsav22 Посмотреть сообщение
char ch;
...
if (ch == EOF) break;
Так делать нельзя, fgetc не просто же так возвращает int. Если использовать char, то как отличать, например, EOF = -1 = FFFFFFFFh от символа с кодом FFh?
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
29.10.2013, 15:07     Посчитать количество пробелов в тексте #9
Пока не согласен. Пишется, что функция считывает символ, как unsigned char и преобразует в целое число. При обнаружении конца файла, возвращает константу EOF. Поэтому, я думаю, функция будет различать FF (как unsigned char) и конец файла. Символа конца файла, насколько я знаю, как такового, не существет. Сравнивается размер файла и количество считанных байтов. Или приведите данные в файле, при которых будет эта ошибка.
Somebody
2770 / 1583 / 141
Регистрация: 03.12.2007
Сообщений: 4,139
Завершенные тесты: 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++ В данном тексте вычислить наибольшее количество символов пробелов, расположенных подряд

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

Или воспользуйтесь поиском по форуму:
alsav22
5282 / 4801 / 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     Посчитать количество пробелов в тексте
Ответ Создать тему
Опции темы

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