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

Вывести текст на экран дисплея - C++

Восстановить пароль Регистрация
 
Ольга08
Сообщений: n/a
10.11.2012, 21:40     Вывести текст на экран дисплея #1
Помогите решить, я совсем не понимаю как сделать
задача такая:
Вариант 8
с помощью текстового редактора создать файл, содержащий текст, длина которого
не превышает 1000 символов (длина строки текста не должна превышать
70 символов).
Имя файла должно иметь расширение DAT.
Написать программу, которая:
• выводит текст на экран дисплея;
а определяет количество символов в самом коротком слове;
• по нажатию произвольной клавиши поочередно выделяет каждое слово текста,
содержащее минимальное количество символов.

вот что сделала я

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
void words(char *s, int posBegin,int posEnd){ if(posBegin-posEnd==1) return;
    for(int i=posBegin;i<=posEnd;i++)cout<<s[i];cout<<'\n';
    }
 
void forr(char *s){
    for(int i=0,k=0;s[i];i++){
        if(s[i]==' ' || s[i]==13){
            words(s,k,i);k=i++;
        }
    }
};
 
int main()
{setlocale (LC_ALL, ".ACP");
 
 
 
 
    ifstream f("text.DAT", ios::binary);
    f.seekg(0,ios_base::end);
    int i=f.tellg();
    f.seekg(0,ios_base::beg);
    char *s=new char[i];
    f.read(s,i);
    f.close();
    s[i+1]=0;
    forr(s);
    
    cin.get();
    //delete s;
    
 
 
    system ("pause");
    return 0;
    
}
ткперь думаю как изменить ф-цию words что бы он считал длину слова и сравнивал. А как выделять слова я вообще не понимаю
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
11.11.2012, 04:37     Вывести текст на экран дисплея #2
Если 0 добавляете, то так правильнее будет:
C++
1
char *s=new char[i + 1];
Ольга08
Сообщений: n/a
11.11.2012, 08:43     Вывести текст на экран дисплея #3
а что мне это даст, он выводит все слова с файле, а мне нужно чтоб минимальные выводил и считал колличество символов, вот как это в функцию прописать я не понимаю. Спасибо за совет, я там поправлю
Ryk
0 / 0 / 0
Регистрация: 19.03.2012
Сообщений: 20
Завершенные тесты: 1
21.01.2013, 17:50     Вывести текст на экран дисплея #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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
#include <iostream>
#include <fstream>
#include <windows.h>
#include <conio.h>
 
using namespace std;
 
void ReadOut(char *fname)
{
    char word[30];
    int tmp=1;
    char ch=' ';
    char space=' ';
    char nxtstr='\r';
    char nxtstr1='\n';
    char endoffile='$1A';
    int dlina=0,dlinamax=0;//Длина, максимальная длина
    int pos=0,endpos=0;
    int flagsl=0;
    int kolmaxslov=0;// Число максимальных по длине слов
    int curmaxslovo=0;// Конкретное максимальное по длине слово
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_GREEN);
    // Открываем файл:
    ifstream Fin(fname, ios::in | ios::binary );//ios::_Nocreate);
 
    // Проверка файла на существование:
    if (Fin.fail())
    {
        cerr << "File is not found" << endl;
        exit(1);
    }
 
    Fin.seekg(0, ios::beg);//Начало файла
    Fin.seekg(0, ios::end);
    endpos=Fin.tellg();
    Fin.seekg(0, ios::beg);//Начало файла
    
    while ( Fin.get(ch) )//Ищем самую большую длину слова
    {
        if ((ch==space)||(ch==nxtstr)||(ch==nxtstr1)||(pos==endpos))
        {   
            if (dlina>=dlinamax) {dlinamax=dlina;}
            dlina=0;
        }
        else dlina++;
    }
 
    Fin.clear();
    Fin.seekg(0, ios::beg);//Начало файла
    ch=' ';
    dlina=0;
    while(Fin.get(ch))//Находим количество слов максимальной длины
    {
 
        if ((ch==space)||(ch==nxtstr)||(ch==nxtstr1)||(pos==endpos))
        {   
            if (dlina==dlinamax) 
            {
                kolmaxslov++;
            }
            dlina=0;
        }
        else dlina++;
    }
 
    Fin.clear();
    Fin.seekg(0, ios::beg);//Начало файла
    ch=' ';
    dlina=0;
    int i=0;
    if(kolmaxslov!=0)
    {
        for(int k=0; k!=kolmaxslov;k++)
        {
            while(Fin.get(ch))
            {
                word[i]=ch;
                i++;
                pos=Fin.tellg();
                if ((ch==space)||(ch==nxtstr)||(ch==nxtstr1)||(pos==endpos))
                {   
                    if (dlina==dlinamax) 
                    {
                        
                        if (curmaxslovo==k)
                        {
                            
                            SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_BLUE);
                            for(int j=0;j<i;j++)
                            {
                                cout<<word[j];
                            }
                            i=0;
                            SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_GREEN);
                        }
                        else
                        {
                            for(int j=0;j<i;j++)
                            {
                                cout<<word[j];
                            }
                            i=0;
                        }
                        curmaxslovo++;
                    }
                    else
                    {
                        for(int j=0;j<i;j++)
                            {
                                cout<<word[j];
                            }
                            i=0;
                    }
                    dlina=0;
                }
                else dlina++;
            }
 
            getch();
            system("cls");
            Fin.clear();
            Fin.seekg(0, ios::beg);//Начало файла
            curmaxslovo=0;
        }
    }
 
 
 
 
    setlocale(LC_ALL, "rus");
    cout<<endl<<"Количество слов максимальной длинны "<<kolmaxslov<<endl;
    cout<<"Максимальная длина слова "<<dlinamax<<endl;
    Fin.close();//Закрываем файл
 
}
 
int main()
{
    // Имя файла:
    char *name = "file.DAT";
    
    // Чтение файла:
    ReadOut(name);
 
    cout << "\n\n";
    system("pause");
    return 0;
}
Yandex
Объявления
21.01.2013, 17:50     Вывести текст на экран дисплея
Ответ Создать тему
Опции темы

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