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

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

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

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

27.10.2013, 20:44. Просмотров 1046. Ответов 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;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.10.2013, 20:44
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Посчитать количество пробелов в тексте (C++):

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

Строки: посчитать количество символов без пробелов - C++
посчитать кол-во символом без пробелов.Что в этом коде не так,подскажите,пожалуйста. #include &lt;iostream.h&gt; #include &lt;stdlib.h&gt; ...

Посчитать количество пустых промежутков - пробелов и табуляций - C++
Дана одна строка, длина которой может быть от 1 до 100 символов. Найдите количество &quot;пустых промежутков&quot; в этой строке, то есть фрагментов...

В строке посчитать наибольшее количество идущих подряд пробелов - C++
В строке посчитать наибольшее количество идущих подряд пробелов

Посчитать количество символов без пробелов в каждом предложении - C++
Здравствуйте! Получила задание посчитать количество предложений в строке и в каждом предложении посчитать количество символов, всё...

Подсчитать наибольшее количество подряд идущих пробелов в тексте - C++
С помощью текстового редактора БЛОКНОТ создать файл, содержащий текст, длина которого не превышает 700 символов (длина строки текста не...

10
newbie666
Заблокирован
27.10.2013, 20:48 #2
Цитата Сообщение от Crazy D Посмотреть сообщение
cout<<k<<endl; выкидывает ошибку
какую ошибку? вроде нет ошибки
0
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++;
    }
как-то так
1
Crazy D
0 / 0 / 0
Регистрация: 19.03.2013
Сообщений: 13
28.10.2013, 16:33  [ТС] #4
так препод.говорил делать по программированию,я это делал по его примеру
0
Somebody
2789 / 1600 / 145
Регистрация: 03.12.2007
Сообщений: 4,193
Завершенные тесты: 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;
}
1
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;
}
0
alsav22
5421 / 4816 / 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;
}
0
rangerx
1933 / 1542 / 141
Регистрация: 31.05.2009
Сообщений: 2,913
29.10.2013, 14:12 #8
Цитата Сообщение от alsav22 Посмотреть сообщение
char ch;
...
if (ch == EOF) break;
Так делать нельзя, fgetc не просто же так возвращает int. Если использовать char, то как отличать, например, EOF = -1 = FFFFFFFFh от символа с кодом FFh?
1
alsav22
5421 / 4816 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
29.10.2013, 15:07 #9
Пока не согласен. Пишется, что функция считывает символ, как unsigned char и преобразует в целое число. При обнаружении конца файла, возвращает константу EOF. Поэтому, я думаю, функция будет различать FF (как unsigned char) и конец файла. Символа конца файла, насколько я знаю, как такового, не существет. Сравнивается размер файла и количество считанных байтов. Или приведите данные в файле, при которых будет эта ошибка.
0
Somebody
2789 / 1600 / 145
Регистрация: 03.12.2007
Сообщений: 4,193
Завершенные тесты: 1
29.10.2013, 17:10 #10
Цитата Сообщение от alsav22 Посмотреть сообщение
приведите данные в файле, при которых будет эта ошибка
Если в файле есть (char)EOF - это обычно 0xff - "я" в 1251.
0
alsav22
5421 / 4816 / 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;
}
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.10.2013, 17:56
Привет! Вот еще темы с ответами:

Посчитать количество знаков препинания в тексте и вывести их количество. - C++
Текст:&quot;Враг, что мудр и много знает, друга может быть ценней. Мудрость уважать пристало у врагов и у друзей.&quot;

В данном тексте вычислить наибольшее количество символов пробелов, расположенных подряд - C++
В данном тексте вычислить наибольшее количество символов пробелов , расположенных подряд помогите сделать в С ++

Посчитать количество букв в заданном тексте - C++
vector&lt;int&gt; alph(123, 0); for (int j = i; j &lt; str5.size(); j += size) { arrstr += str5; alph)] ++; } for (int t = 97;...

Посчитать количество предложений в данном тексте - C++
Помогите!!!!!!! Дан текст. Посчитать количество предложений в нем. Содержит данный текст восклицательные предложения ? ...


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

Или воспользуйтесь поиском по форуму:
11
Yandex
Объявления
29.10.2013, 17:56
Ответ Создать тему
Опции темы

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