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

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

23.01.2015, 22:48. Просмотров 861. Ответов 3
Метки нет (Все метки)

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

Пользуюсь Visual Studia 2012.
Программа считывает строки с файла нормально, но вот проверка на кол-во слов неправильная, и когда ввожу строку с клавиатуры, автоматически пропускается 1 строка, и начинается ввод со 2. Кроме того, в середине проверки на кол-во, где-то сбой, и если кол-ва должны были быть по-порядку "1,2,3,4,5,6", то почему-то начинается "1,3,4,5,5,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
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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
#include <cstdlib>
#include <locale.h>
#include <stdlib.h>
#include <cctype>
#include <conio.h>
#include <iostream>
#include <cmath>
#include <math.h>
#include <stdio.h>
#include <cstring>
#include <cctype>
#include <fstream>
 
using namespace std;
 
int main()
{ 
    setlocale (0, "Russian");
    
    int const H = 10, L = 50;
    char str [H][L];
    int d;
    cout << "Wwedite deistwie: " << endl;
    cout << "1 - wwesti stroku s klawy" << endl;
    cout << "2 - wwesti dannie s faila" << endl;
    cin >> d;
    FILE *in = fopen("file2.txt","r");
    cout << endl;
    if (d != 1 && d !=2 )
        { return 0;
        }
    if (!(d == 1))
    {
        if(in==NULL)
     {
         cout<<"Ошибка в открытии файла file2.txt"<<endl;
     }
     else
     {
        {
            for (int i(0); i < H; i++)
                {
                    fgets(str[i],L,in);
                    cout << str[i];
                }   
        }
     }
    }
    else
    {
        for (int i(0);i < H; i++)
        {
            cout << "Wwedite " << i+1 << " stroku: ";
            cin.getline(str[i],L);
            cout << endl;
        }
    }
    cout << endl;
    int kolS[H]; // массив, в котором храню количество слов в i строке
    int kol=0;
    bool w = false;
    for (int i(4); i < 10; i++)
    {
        for (int j(0); j < str[i][j] != '\0'; j++)
        {
            if (isalpha(str[i][j]) && !w)
            {   kol++;
                w = true;   }
            if (!isalpha(str[i][j]))
                w = false;
        }   cout << kol << endl;
        kol = 0;
            if (i == 1)
            {   kol--;
                w = true;   }
            kolS[i] =kol + kolS[i];
            cout << "kol-wo slow w " << i+1 << " stroke= " <<kol << endl;
            kol = 0;
    }
    cout << endl;
    _getch();
    return 0;
}
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.01.2015, 22:48
Ответы с готовыми решениями:

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

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

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

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

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

3
DU
1487 / 1133 / 165
Регистрация: 05.12.2011
Сообщений: 2,279
23.01.2015, 22:59 2
у вас поведение зависит от того, что вы там вводите. что вы вводите непонятно. ну и
чтобы людям не мучится, замените свой цикл ввода на то, что вы вводите:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
// это
       for (int i(0);i < H; i++)
        {
            cout << "Wwedite " << i+1 << " stroku: ";
            cin.getline(str[i],L);
            cout << endl;
        }
 
// на
str[0] = "111";
str[1] = "dfsfs";
....
str[9] = "xyz";
ну и если не знакомы с дебагером, крайне полезно будет ознакомится в любом случае:
для затравки:
http://www.cyberforum.ru/cpp-beginners/thread1262479.html
0
Kerry_Jr
Эксперт PHP
2210 / 2006 / 940
Регистрация: 14.05.2014
Сообщений: 5,869
Записей в блоге: 1
Завершенные тесты: 5
24.01.2015, 11:08 3
Лучший ответ Сообщение было отмечено anoptikus как решение

Решение

anoptikus, такой код устроит?
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
54
55
56
57
58
59
60
61
62
63
64
65
#include <iostream>
#include <fstream>
#include <sstream>
#include <string>
#include <cstdlib>
 
int main()
{
    setlocale(LC_CTYPE, "Rus");
    int choice, count;
    const int N = 10;
    std::string sentence[N];
    std::string word;
    do
    {
        std::system("cls");
        std::cout << "1 - Ввод вручную" << std::endl;
        std::cout << "2 - Ввод из файла" << std::endl;
        std::cout << "Ваш выбор: ";
        (std::cin >> choice).get();
        std::cout << std::endl; 
    } while (choice < 1 || choice > 2);
    if (choice == 1)
    {
        for (int i = 0; i < N; ++i)
        {
            std::cout << "Введите " << i+1 << " строку: ";
            std::getline(std::cin, sentence[i]);
        }
        std::cout << std::endl;
    }
    else
    {
        std::ifstream in("file2.txt");
        if (!in.is_open())
        {
            std::cerr << "Ошибка открытия файла!" << std::endl << std::endl;
            std::system("pause");
            return 0;
        }
        for (int i = 0; i < N; ++i)
            std::getline(in, sentence[i]);
        in.close();
 
        for (int i = 0; i < N; ++i)
            std::cout << sentence[i] << std::endl;
        std::cout << std::endl;
    }
 
    std::stringstream ss;
    for (int i = 0; i < N; ++i)
    {
        count = 0;
        ss << sentence[i];
        while (ss >> word) count++;
        std::cout << "Количество слов в " << i+1 << " строке: " << count << std::endl;
        ss.str("");
        ss.clear();
    }
    std::cout << std::endl;
    
    std::system("pause");
    
    return 0;
}
1
anoptikus
0 / 0 / 0
Регистрация: 23.01.2015
Сообщений: 2
24.01.2015, 14:45  [ТС] 4
Спасибо огромное!)

Добавлено через 1 час 33 минуты
И вопрос если можно, касательно Вашей программы, плохо разобрался, что делают и зачем эти команды:
stringstream ss;
ss.str("");

и как работает эта проверка: while (ss >> word)
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.01.2015, 14:45

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

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

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


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

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

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