Работа со строками вариант 8, расширение файла DAT, определяет количество символов в самом коротком слове содержащее минимальное количество символов.

О задаче:
[свернуть]

По книге:C/C++ Программирование на языке высокого уровня: Учебник для вузов
Автор книги: Павловская Татьяна Александровна
Задача на тему: Функции библиотеки для работы со строками и символами — (на странице 159)
Вариант задачи: 8 — (на странице 161)’ style=’default’ collapse_link=’true’]
Условия задачи:
[свернуть]

С помощью текстового редактора создать файл, содержащий текст, длина которого не превышает 1000 символов (длина строки текста не должна превышать 70 символов).
Имя файла должно иметь расширение DAT.
Написать программу, которая:
[свернуть]

  • выводит текст на экран дисплея ;
  • определяет количество символов в самом коротком слове;
  • по нажатию произвольной клавиши поочередно выделяет каждое слово текста, содержащее минимальное количество символов.

‘ style=’default’ collapse_link=’true’]

Листинг(исходник) программы:
[свернуть]

Function.h
[свернуть]


void Find_words_to_text(char *Text,int &AllNumWords, int *Word, int *NumSymbols, int Num);
void Find_min_words(char *Text,int AllNumWords, int *NumSymbols, int Num,int *Word,int *Min_word,int &Num_symbols_word,int &Num_min_word);

‘ style=’default’ collapse_link=’true’]

Function.cpp
[свернуть]


#pragma once
#include <iostream>
#include <fstream>
#include <cctype>
using namespace std;
void Find_words_to_text(char *Text,int &AllNumWords, int *Word, int *NumSymbols, int Num)
{
for(int i(0),j(0); i<Num; i++)
{
if( Text[i] == \'\\0\' )	break;
else if( Text[i] == \' \' || Text[i] == \'\\n\') continue;
else if( ( !i || !isalpha(Text[i-1]) ) && isalpha(Text[i]) )
{
Word[j]=i;
NumSymbols[j]++;
if( !isalpha(Text[i+1]) )
{
AllNumWords++;
j++;
}
}
else if( isalpha(Text[i]) && isalpha(Text[i+1]) )
{
NumSymbols[j]++;
}
else if( isalpha(Text[i]) && !isalpha(Text[i+1]) )
{
AllNumWords++;
NumSymbols[j]++;
j++;
}
}
}
void Find_min_words(char *Text,int AllNumWords, int *NumSymbols, int Num,int *Word, int *Min_word,int &Num_symbols_word,int &Num_min_word)
{
for(int i(0); i < AllNumWords; i++)
{
if( !i ) Num_symbols_word = NumSymbols[i];
else if( Num_symbols_word > NumSymbols[i] ) Num_symbols_word = NumSymbols[i];
else if ( Num_symbols_word == 1 ) break;
}

for(int i(0),j(0); i < AllNumWords; i++)
{
if(Num_symbols_word == NumSymbols[i])
{
Min_word[j] = Word[i];
Num_min_word++;
j++;
}
}
}

‘ style=’default’ collapse_link=’true’]

main.cpp
[свернуть]


#include <iostream>
#include <fstream>
#include <cctype>
#include <locale>
#include <conio.h>
#include "Function.h"
#define Num 1001
using namespace std;
void main()
{
setlocale(LC_ALL,"Russian");

// для программу в общем
char Text[Num];

//для 1-ой функции
int AllNumWords=0; // Количество слов в тексте
int Word[Num/2]={0}; // Позиция начала слов относительно начала текста
int NumSymbols[Num/2]={0}; // Количество символов в словах

//для 2-ой функции
int Min_word[Num/2]={0}; // Слова в тексте с минимальным количеством символов
int Num_symbols_word=0; //Количество символов в минимальном слове
int Num_min_word=0; //Сколько всего слов с минимальным количеством букв

ifstream fin("TextFile.dat"); 

if(fin)
{
fin.getline(Text,1000,\'\\0\'); fin.close();
Find_words_to_text(Text,AllNumWords, Word, NumSymbols, Num);
Find_min_words(Text, AllNumWords, NumSymbols, Num, Word, Min_word, Num_symbols_word, Num_min_word);


//////////////////////////////////////////////////////////////////////////////////////////////////////////
cout<<"Количество символов в самом коротком слове равно "<<Num_symbols_word<<endl;
cout<<"Нажимайте любую клавишу чтобы выделить самые короткие слова в тексте.\\n\\n"<<Text<<endl;
char Select;
for(int j=0; j<Num_min_word; j++)
{
cout<<endl;
system("pause");
cout<<endl;
Select = _getch();
system("cls");
cout<<"Количество символов в самом коротком слове равно "<<Num_symbols_word<<endl;
cout<<"Нажимайте любую клавишу чтобы выделить самые короткие слова в тексте.\\n\\n";
for(int i = 0; i<Num; i++)
{
if( Text[i] == \'\\0\')
{
break;
}
else if( Min_word[j] == i )
{
cout<<"<<";
cout.put(Text[i]);
}
else if( Min_word[j]+Num_symbols_word == i )
{
cout<<">>";
cout.put(Text[i]);
}
else cout.put(Text[i]);
}
cout<<endl;
}
cout<<endl;
system("pause");
}
else
{
cout<<"Файл для чтения \\"TextFile.dat\\" не был найден!!!"<<endl<<endl;
system("pause");
}
}

‘ style=’default’ collapse_link=’true’]

Текстовый файл: [attachment=48:TextFile.dat]

Автор: Павел Кадыров

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *