Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
Scandal
0 / 0 / 0
Регистрация: 15.09.2014
Сообщений: 36
1

Определить количество слов в каждой строке текста

25.09.2014, 17:42. Просмотров 796. Ответов 14
Метки нет (Все метки)

Всем привет, задание такое(Определить сколько слов в каждой строке текста.(из текстовика)), я написал всё, но только у меня выводит общее кол-во строк и слов, а нужно отдельно) как поправить код?)

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
#include <iostream>
#include "stdio.h"
 
using namespace std;
 
int main()
{
        FILE *f;
        f=fopen("text.txt","r");
        char text[10][80], *p;
        int i;
        i = 0;
        while (!feof(f))            
    {   fgets(text[i],80,f);    
        i++;
    }
        int countstr = i;
        int count = 1, t, z;
        for(i=0; i<countstr; i++)
            for(t=0; text[i][t] !='\0'; t++)
                if(text[i][t] != ' ' && text[i][t+1] == ' ')
                    count++;
 
        cout <<i<< " str - " << count<<" slov "<< endl;
 
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.09.2014, 17:42
Ответы с готовыми решениями:

Подсчитать количество слов в каждой строке текста
Здравствуйте. Помогите, пожалуйста, с заданием. Для задачки взять любой...

Определить количество слов в каждой строке
Задание было следующее: Определить количество слов в каждой строке. Сделать...

Определить количество слов в каждой строке , начинающихся на
Определить количество слов в каждой строке , начинающихся на ‘А’ и...

Определить количество слов в каждой строке , начинающихся на ‘А’ и заканчивающихся на “ и”
Определить количество слов в каждой строке , начинающихся на ‘А’ и...

Вывести все слова из каждой строки, начинающиеся и заканчивающиеся на заданную букву и количество таких слов в каждой строке.
Ребят, всем привет!; Помогите, пожалуйста, решить задачу со строками на С++;...

14
sourcerer
Модератор
Эксперт CЭксперт С++
4868 / 2053 / 325
Регистрация: 20.02.2013
Сообщений: 5,556
Записей в блоге: 24
Завершенные тесты: 1
25.09.2014, 17:52 2
C++
1
2
cout << i << " strings." << endl;
cout << count << " words." << endl;
Добавлено через 6 минут
И ещё несколько замечаний, с Вашего позволения.
  • Код на форуме запихивайте в тэги [СРР][/СРР], а то читать невозможно.
  • Отформатируйте Ваш код (отступы, пробелы, табуляции).
  • Вместо "stdio.h" лучше использовать <cstdio>.
  • Уберите строчку using namespace std; и вместо неё используйте идентификатор пространства имён std операцию разрешения контекста :: (потому как у Вас всего два объекта будут с таким синтаксисом - cout и endl).
  • В конце кода перед закрывающей фигурной скобкой добавьте return 0;
0
ITraceR
Заблокирован
25.09.2014, 17:57 3
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
#include <iostream>
#include "stdio.h"
 
using namespace std;
 
int main()
{
FILE *f;
f=fopen("text.txt","r");
char text[10][80], *p;
int i;
i = 0;
while (!feof(f))    
{   fgets(text[i],80,f); 
for(t=0; text[i][t] !='\0'; t++)
if(text[i][t] != ' ' && text[i][t+1] == ' ')
count++;
cout <<i<< " stroka - " << count<<" slov "<< endl;
i++;
}
 
cout << "vsego strok - " << i+1 <<endl;
 
return 0;
}
1
sourcerer
Модератор
Эксперт CЭксперт С++
4868 / 2053 / 325
Регистрация: 20.02.2013
Сообщений: 5,556
Записей в блоге: 24
Завершенные тесты: 1
25.09.2014, 18:14 4
Кроме того, несколько переменных и указателей у Вас, которые не используются:
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
#include <iostream>
#include "stdio.h"
 
using namespace std;
 
int main()
{
    FILE *f;
    f = fopen("text.txt","r");
    char text[10][80], *p;
    int i;
    i = 0;
    while (!feof(f))
    {
        fgets(text[i],80,f);
        i++;
    }
    int countstr = i;
    int count = 1, t, z;
    for (i=0; i<countstr; i++)
        for (t=0; text[i][t] !='\0'; t++)
            if (text[i][t] != ' ' && text[i][t+1] == ' ')
                count++;
 
    cout << i << " str - " << count << " slov " << endl;
 
}
В 10-й строчке char * p;
в 19-й строчке int z;
Зачем они?

Зачем 11 и 12 строчки? Почему не
C++
1
    int i = 0;
Добавлено через 6 минут
Ну и 19 строка - извращение какое-то, на мой взгляд.
И вообще, зачем Вы объявляете временные, по сути, переменные цикла for перед циклом? Какой в этом смысл? Чем не устраивает конструкция
C++
1
2
    for (int i=0; i<countstr; ++i)
        for (int j=0; text[i][j] !='\0'; ++j)
?
0
Scandal
0 / 0 / 0
Регистрация: 15.09.2014
Сообщений: 36
25.09.2014, 18:23  [ТС] 5
gru74ik, нет) вы не так поняли) мне нужно так:
строка 1 : 5 слов
строка 2 : 7 слов
строка 3 : 12 слов
и так далее) можно как-то так сделать?)
0
ITraceR
Заблокирован
25.09.2014, 18:44 6
Вот так работает, почти.
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
#include <iostream>
#include "stdio.h"
 
using namespace std;
 
int main()
{
    FILE *f;
    f = fopen("input.txt", "r");
    char text[10][80];
    int i = 0;  
    while (!feof(f))
    {
        int count = 0;
        fgets(text[i], 80, f);
        for (int t = 0; text[i][t] != '\0'; t++)
        {
            if (text[i][t] == ' ' || text[i][t] == '\n')
                count++;
        }
        cout << i << " stroka - " << count << " slov " << endl;
        i++;
    }
 
    cout << "vsego strok - " << i << endl;
 
    return 0;
}
1
Scandal
0 / 0 / 0
Регистрация: 15.09.2014
Сообщений: 36
25.09.2014, 18:54  [ТС] 7
ITraceR, в тексте же может быть и 2 пробела между словами) у Вас это не учтено) но я знаю как поправить) спасибо) ща буду тестить)
0
zss
Модератор
Эксперт С++
7404 / 6796 / 4299
Регистрация: 18.12.2011
Сообщений: 17,946
Завершенные тесты: 1
25.09.2014, 19:08 8
1. Зачем смешивать Сишный и потоковый ввод-вывод.
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
#include <iostream>
#include <fstream>
#include <strstream>
using namespace std;
 
 
int main()
{ 
    ifstream f("text.txt"); // создаем поток ввода и связываем его с файлом text.txt
    if(!f) // файл не открылся
        return 1;
    char text[80];
    int StringNumber=0;
    while(f.getline(text,80)) // читаем по строкам
    {
        StringNumber++; // считаем строки
        char tmp[80];
        istrstream ss(text,80);   // создаем поток строкового ввода и связываем его со строкой txt
        int count=0; 
        while(ss>>tmp) // читаем по словам
            count++; // считаем слова
        cout << StringNumber<< " stroka - " << count << " slov " << endl;
    }
    system("pause");
    return 0;
}
0
Scandal
0 / 0 / 0
Регистрация: 15.09.2014
Сообщений: 36
25.09.2014, 19:17  [ТС] 9
zss, дело в том, что я учусь на первом курсе и орудую тем, чем умею) из того что Вы написали я 50% не понял) а если я просто принесу Ваш код, преподаватель поставит 3 в лучшем случае) т.к. такого мы не учили)
0
zss
Модератор
Эксперт С++
7404 / 6796 / 4299
Регистрация: 18.12.2011
Сообщений: 17,946
Завершенные тесты: 1
25.09.2014, 19:22 10
Ну хотя бы поняли, что нехорошо использовать "fgets" и "cout<<" в одной программе.
Если fgets, то - printf
Если cout, то - ifstream
И если Вам объяснили потоковый ввод - вывод, то должны разобрать и остальное. Я вставил подробные комментарии.
0
Scandal
0 / 0 / 0
Регистрация: 15.09.2014
Сообщений: 36
25.09.2014, 19:25  [ТС] 11
zss, в методичке преподавателя текст привязываем через "fgets", преподают нам С++, делаю как могу) как мне сделать, чтоб писало
" строка 1 : n слов
строка 2 : m слов"
и т.д?)
0
zss
Модератор
Эксперт С++
7404 / 6796 / 4299
Регистрация: 18.12.2011
Сообщений: 17,946
Завершенные тесты: 1
25.09.2014, 19:32 12
Похоже Вам надо было постить сообщение в раздел "Си для начинающих"
Подправлю код ITraceR,
C++
1
2
3
4
5
6
7
8
9
10
11
12
while (!feof(f))
{
        int count = 0;
        fgets(text[i], 80, f);
        for (int t = 1; text[i][t]; t++)
        {
            if    (text[i][t] == ' ' || text[i][t] == '\n')  &&  text[i][t-1] != ' ' )
                count++;
        }
        printf( " stroka - %d  %d  slov\n", i, count);
        i++;
}
0
Scandal
0 / 0 / 0
Регистрация: 15.09.2014
Сообщений: 36
25.09.2014, 19:42  [ТС] 13
zss, а можно через cout?) а то вообще не понятно)
0
zss
Модератор
Эксперт С++
7404 / 6796 / 4299
Регистрация: 18.12.2011
Сообщений: 17,946
Завершенные тесты: 1
25.09.2014, 21:32 14
Через cout - пост №8. Я там все подробно расписал.
0
sourcerer
Модератор
Эксперт CЭксперт С++
4868 / 2053 / 325
Регистрация: 20.02.2013
Сообщений: 5,556
Записей в блоге: 24
Завершенные тесты: 1
26.09.2014, 08:45 15
Цитата Сообщение от Scandal Посмотреть сообщение
из того что Вы написали я 50% не понял
C++
1
ifstream f;
Создаётся объект по имени f класса ifstream. Автор кода назвал объект одной буквой - f (видимо, отталкивался от Вашего варианта). Я обычно такой объект называю fin (от "file input" - файловый ввод; поток ввода идёт из файла) по аналогии с привычным Вам объектом cin (от "character input" - символьный ввод), который тоже (если Вы не знали) является объектом класса ifstream.
В принципе, неважно как такой объект Вы назовёте - f, или fin, или inFile, или ещё как-то по-своему. Называйте как Вам удобнее. Просто помните - объект fin работает по аналогии с объектом cin.
Не забудьте включить заголовочный файл <fstream>
C++
1
if (!f)
Строчка означает "если ввод не был успешен". Ввод в поток. В нашем случае - ввод в поток из файла. Сравните, если поменяем имя на более понятное fin:
if (!fin)
Ведь очень похоже на привычное
if (!cin)
Не так ли?
C++
1
while (f.getline(text,80))
Опять же, функция-член getline должна быть Вам знакома по работе с объектом cin. Наверняка видели такую запись: cin.getline(text, 80). Ну вот, а тут только поток ввода перенаправили. Обычно, когда Вы пользуетесь объектом cin, ввод у Вас идёт с клавиатуры, а тут Вы используете свой объект f и ввод идёт из файла.
C++
1
istrstream ss(text,80);
Та же петрушка. Стандартная приблуда, чтобы ввод осуществлялся построчно. Создали свой объект по имени ss (от "string stream" - "строковый поток" или "поток строк") класса istrstream. Читаем в него из файла строку. Как только достигаем симола конца строки (то есть '\n'), ввод останаливается. Строка считана. Всё это дело происходит в цикле while, поэтому и считывается строка за строкой.
Не забудьте включить заголовочник <strstream>
Как-то так.

Добавлено через 1 час 17 минут
Интересно. До тех пока не залогинишься, видны сообщения от пользователя Similar, а как залогинишься - не видны.
Кликните здесь для просмотра всего текста

Вот какие топики он предложил посмотреть:

Определить количество слов в каждой строке , начинающихся на

Массивы. Определить количество элементов в каждой строке матрицы А, модуль которых равняется порядковому номеру элемента в строке

В заданной строке определить количество слов

Cтрока: Определить количество средних слов в строке и какое из слов начинается на большую по коду букву

В заданной строке определить количество слов (в строке может содержаться несколько пробелов подряд).

Вывести все слова из каждой строки, начинающиеся и заканчивающиеся на заданную букву и количество таких слов в каждой строке.

Подсчитать количество всех строк, а потом - количество слов в каждой строке

Программа считывает строку текста, выводит число слов и количество вхождений каждой буквы

Определить, являются ли слова в каждой строке текста упорядоченными по алфавиту

Определить количество слов в каждой строке , начинающихся на ‘А’ и заканчивающихся на “ и”
0
26.09.2014, 08:45
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.09.2014, 08:45

Подсчитать количество всех строк, а потом - количество слов в каждой строке
Программа считает количество строк в файле add.txt выводит на экран и...

Вывод на экран слов в порядке убывания их длины в каждой строке текста
Здравствуйте товарищи, никак не получается написать функцию сортировки слов в...

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


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

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