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

Выводит какую то ересь - C++

Восстановить пароль Регистрация
 
влад0
4 / 4 / 0
Регистрация: 22.05.2012
Сообщений: 115
16.02.2014, 01:01     Выводит какую то ересь #1
В общем начал выполнять свою лабораторную, задание которой было таковым:
"В заданном предложении указать слово, в котором доля гласных(A, E, I, O)(a, e, i, o) максимальна. Предложение может иметь больше одной строки и заканчивается точкой"

Прошу не осуждать что программа без функций. Пока делаю так потом переделаю...
Пока что я пробую вывести на экран таблицу(матрицу) в которой будет записано кол-во этих гласных в каждом слове и их сумма... Н у и в общем выводит у меня вместе таблицы вот это:
Выводит какую то ересь


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
#include "stdafx.h"
#include "fstream"
#include "iostream"
#include "iomanip"
 
using namespace std;
 
int main()
{
    char ch;
    int n=0,m=5;
    char np;
    int al=0,il=0,el=0,ol=0;
    
    ifstream fin("include_inform.txt");
    if (!fin)
        cout<<"\n\tThis file is not found\n";
    
    while(!fin.eof())
    {
        fin.get(np);
        if (np=='\n')
            n++;
    }
    
    int **f_mas=new int* [n];
 
    for (int count=0;count<n;count++)
        f_mas[count]=new int[m];
 
    while (fin.get(ch)) 
    {
        if (ch==' ')
        {
            f_mas[n][4]=0;
            for(int i=0; i<4;i++)
                f_mas[n][4]=+f_mas[n][i];
            n++;
            al=0;il=0;el=0;ol=0;
        }
        else
        {
            if (ch=='A' || ch=='a')
            {
                f_mas[n][0]=al++;
            }
            if (ch=='E' || ch=='e')
            {
                f_mas[n][1]=el++;
            }   
            if (ch=='I' || ch=='i')
            {
                f_mas[n][2]=il++;
            }
            if (ch=='O' || ch=='o')
            {
                f_mas[n][3]=ol++;
            }
 
        }
 
    }
    cout<<endl;
    for(int i=0; i<n;i++)
    {
        for(int j=0;j<m;j++)
            cout<<setw(7)<<f_mas[i][j];
        cout<<endl;
    }
    system("pause");
    return 0;
}

Содержимое файла include_inform.txt:
Katherine Mansfield, an outstanding English short-story writer of the 20th century,
was born in New Zealand in 1888 and died in 1923.
Помогите решить проблему. Ну и если есть варианты решения этой задачи получше, рассказивате, буду рад вас послушать Я пока только учу работу со строками...
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
влад0
4 / 4 / 0
Регистрация: 22.05.2012
Сообщений: 115
16.02.2014, 01:23  [ТС]     Выводит какую то ересь #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
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
#include "stdafx.h"
#include "fstream"
#include "iostream"
#include "iomanip"
 
using namespace std;
 
int main()
{
    char ch;
    int n=1,m=5;
    char np;
    int al=0,il=0,el=0,ol=0;
    
    ifstream fin("include_inform.txt");
    if (!fin)
        cout<<"\n\tThis file is not found\n";
    
    while(!fin.eof())
    {
        fin.get(np);
        if (np=='\n')
            n++;
    }
    
    int **f_mas=new int* [n];
    for (int count=0;count<n;count++)
        f_mas[count]=new int[m];
    n=0;
 
    while (fin.get(ch)) 
    {
        if (ch==' ')
        {
            f_mas[n][4]=0;
            for(int i=0; i<4;i++)
                f_mas[n][4]=+f_mas[n][i];
            n++;
            al=0;il=0;el=0;ol=0;
        }
        else
        {
            if (ch=='A' || ch=='a')
            {
                f_mas[n][0]=al++;
            }
            if (ch=='E' || ch=='e')
            {
                f_mas[n][1]=el++;
            }   
            if (ch=='I' || ch=='i')
            {
                f_mas[n][2]=il++;
            }
            if (ch=='O' || ch=='o')
            {
                f_mas[n][3]=ol++;
            }
 
        }
 
    }
    cout<<endl;
    for(int i=0; i<n;i++)
    {
        for(int j=0;j<m;j++)
            cout<<setw(7)<<f_mas[i][j];
        cout<<endl;
    }
    system("pause");
    return 0;
}
Но теперь на вывод идет 2 пустых строки и "Нажмите энтэр чтобы продолжить"
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
16.02.2014, 01:31     Выводит какую то ересь #3
После подсчёта строк, нужно сбросить флаг eof и вернуть курсор к началу файла:
C++
1
2
fin.clear();
fin.seekg(0);
влад0
4 / 4 / 0
Регистрация: 22.05.2012
Сообщений: 115
16.02.2014, 01:39  [ТС]     Выводит какую то ересь #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
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
#include "stdafx.h"
#include "fstream"
#include "iostream"
#include "iomanip"
 
using namespace std;
 
int main()
{
    char ch;
    int n=1,m=5;
    char np;
    int al=0,il=0,el=0,ol=0;
    
    ifstream fin("include_inform.txt");
    if (!fin)
        cout<<"\n\tThis file is not found\n";
    
    while(!fin.eof())
    {
        fin.get(np);
        if (np=='\n')
            n++;
    }
    
    int **f_mas=new int* [n];
    for (int count=0;count<n;count++)
        f_mas[count]=new int[m];
    n=0;
 
    while (fin.get(ch)) 
    {
        if (ch==' ')
        {
            f_mas[n][4]=0;
            for(int i=0; i<4;i++)
                f_mas[n][4]=+f_mas[n][i];
            n++;
            al=0;il=0;el=0;ol=0;
        }
        else
        {
            if (ch=='A' || ch=='a')
            {
                f_mas[n][0]=al++;
            }
            if (ch=='E' || ch=='e')
            {
                f_mas[n][1]=el++;
            }   
            if (ch=='I' || ch=='i')
            {
                f_mas[n][2]=il++;
            }
            if (ch=='O' || ch=='o')
            {
                f_mas[n][3]=ol++;
            }
 
        }
 
    }
    cout<<endl;
    for(int i=0; i<n;i++)
    {
        for(int j=0;j<m;j++)
            cout<<setw(7)<<f_mas[i][j];
        cout<<endl;
    }
    system("pause");
    return 0;
}
Но теперь на вывод идет 2 пустых строки и "Нажмите энтэр чтобы продолжить"

Добавлено через 3 минуты
Цитата Сообщение от alsav22 Посмотреть сообщение
После подсчёта строк, нужно сбросить флаг eof и вернуть курсор к началу файла:
C++
1
2
fin.clear();
fin.seekg(0);
Необработанное исключение в "0x00cf17fb" в "Search_word's.exe": 0xC0000005: Нарушение прав доступа при записи "0xfdfdfdfd".
Выскочило и указывает на 45ю строку...
Alex566
 Аватар для Alex566
240 / 152 / 18
Регистрация: 03.04.2013
Сообщений: 317
16.02.2014, 01:46     Выводит какую то ересь #5
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Я так понимаю вам нужно просто вывести на экран слово с наибольшим количеством этих букв?
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
#include <fstream>
#include <iostream>
#include <string>
using namespace std;
 
int main()
{
    ifstream fin("include_inform.txt");
    string max;
    int count = 0, i = 0;
    if (!fin.fail())
    {
        while (!fin.eof())
        {
            string tm;
            fin >> tm;
            for (char c : tm)
                if (c == 'A' || c == 'a' || c == 'E' || c == 'e' || c == 'I' || c == 'i' || c == 'O' || c == 'o')
                    i++;
            if (i > count)
            {
                count = i;
                max = tm;
            }
            i = 0;
        }
        cout << max << endl;
    }
    fin.close();
    system("pause");
    return 0;
}
влад0
4 / 4 / 0
Регистрация: 22.05.2012
Сообщений: 115
16.02.2014, 01:52  [ТС]     Выводит какую то ересь #6
Цитата Сообщение от Alex566 Посмотреть сообщение
Я так понимаю вам нужно просто вывести на экран слово с наибольшим количеством этих букв?
C++
1
2
3
            for (char c : tm)
                if (c == 'A' || c == 'a' || c == 'E' || c == 'e' || c == 'I' || c == 'i' || c == 'O' || c == 'o')
                    i++;
Объясните мне до каких пор работает такой цикл For?
Alex566
 Аватар для Alex566
240 / 152 / 18
Регистрация: 03.04.2013
Сообщений: 317
16.02.2014, 02:01     Выводит какую то ересь #7
Цитата Сообщение от влад0 Посмотреть сообщение
Объясните мне до каких пор работает такой цикл For?
Пока не переберет каждый символ из строки tm. По смыслу аналогично
C++
1
2
3
for (int i = 0; i<tm.length(); i++)
                if (tm[i] == 'A' || tm[i] == 'a' || tm[i] == 'E' || tm[i] == 'e' || tm[i] == 'I' || tm[i] == 'i' || tm[i] == 'O' || tm[i] == 'o')
                    i++;
влад0
4 / 4 / 0
Регистрация: 22.05.2012
Сообщений: 115
16.02.2014, 02:17  [ТС]     Выводит какую то ересь #8
Цитата Сообщение от Alex566 Посмотреть сообщение
Пока не переберет каждый символ из строки tm. По смыслу аналогично
C++
1
2
3
for (int i = 0; i<tm.length(); i++)
                if (tm[i] == 'A' || tm[i] == 'a' || tm[i] == 'E' || tm[i] == 'e' || tm[i] == 'I' || tm[i] == 'i' || tm[i] == 'O' || tm[i] == 'o')
                    i++;
Спасибо! разобрался! Только там наверное условием цикла стоить выбрать другую переменную, не i..
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.02.2014, 02:20     Выводит какую то ересь
Еще ссылки по теме:

с++,циклическая очередь, сразу норм выводит, а потом на где-то логика нарушается и неправильно выводит C++
C++ Разработать программу которая выводит на экран, которая выводит содержимое текущего каталога, упорядоченное по времени
C++ Напишите программу, которая выводит на экран содержимое файла и выводит сумму чисел файла

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

Или воспользуйтесь поиском по форуму:
Alex566
 Аватар для Alex566
240 / 152 / 18
Регистрация: 03.04.2013
Сообщений: 317
16.02.2014, 02:20     Выводит какую то ересь #9
Цитата Сообщение от влад0 Посмотреть сообщение
Только там наверное условием цикла стоить выбрать другую переменную, не i..
Да. Это я для примера показал.
Yandex
Объявления
16.02.2014, 02:20     Выводит какую то ересь
Ответ Создать тему
Опции темы

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