Вариант 7, задача работы со строками, с помощью текстового редактора создать файл имя файла должно иметь расширение DAT

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

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

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

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

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

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

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


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

char Text[1001];
char *pBeginWords[500] = {0};
ifstream fin("TextFile.dat"); 
if(fin)
{
fin.getline(Text,1000,\'\\0\'); fin.close();
int lengthAllWords[500] = {0},
NumbAllWords=0;
for( int i=0, j=0; i<=1001; i++)
{
if (Text[i] == \'\\0\' && i ) break;
else if (Text[i] == \' \' && !i ) continue;
else if( isalpha(Text[i]) && !lengthAllWords[j])
{
pBeginWords[j] = &Text[i];
lengthAllWords[j]++;
}
else if(isalpha(Text[i]))
{
lengthAllWords[j]++;
}
else if(isalpha(Text[i-1]) && !isalpha(Text[i]))
{
j++;
}
NumbAllWords = j;
}
int MaxLengthWord(0), indexMaxLengthWord(0);
for( int j=0; j<NumbAllWords; j++)
{
if(lengthAllWords[j] > MaxLengthWord) MaxLengthWord = lengthAllWords[j], indexMaxLengthWord = j;
}
int NumWordMaxLength(0), *MaxWordPosix = new int[NumbAllWords];
*MaxWordPosix = NULL;
for( int j=0, i=0; j<NumbAllWords; j++)
{
if(lengthAllWords[indexMaxLengthWord] == lengthAllWords[j])
{
MaxWordPosix[i] = j; i++; NumWordMaxLength = i;
}
} 
//////////////////////////////////////////////////////////////////////////////////////////////////////////
cout<<"Количество символов в самом длинном слове равно "<<MaxLengthWord<<endl;
cout<<"Нажимайте любую клавишу чтобы выделить самые длинные слова в тексте.\\n\\n"<<Text<<endl;
char *pText = Text;
char Select;
char buff;
for(int j=0; j<NumWordMaxLength; j++)	//Цикл выделения всех длинных слов в тексте
{
cout<<endl;
system("pause");
cout<<endl;
Select = _getch();
system("cls");
cout<<"Количество символов в самом длинном слове равно "<<MaxLengthWord<<endl;
cout<<"Нажимайте любую клавишу чтобы выделить самые длинные слова в тексте.\\n\\n";
for(int i= 0; i<1001; i++)	 //Цикл прохода по всем символам в тексте
{
if( &pText[i] < pBeginWords[MaxWordPosix[j]] )
{
buff = pText[i];
cout.put(buff);
}

else if( ( &pText[i] == pBeginWords[MaxWordPosix[j]] ) )
{
cout<<" <<";
buff = pText[i];
cout.put(buff);
}
else if( ( &pText[i] == (pBeginWords[MaxWordPosix[j]]+MaxLengthWord ) ) )
{
cout<<">> ";
buff = pText[i];
cout.put(buff);
}
else if( (&pText[i] > pBeginWords[MaxWordPosix[j]]) && ( &pText[i] < pBeginWords[MaxWordPosix[j]+NumWordMaxLength]) )
{
buff = pText[i];
cout.put(buff);
}
else if( buff == \'\\0\'){ cout<<endl; break;}
else if( &pText[i] > (pBeginWords[MaxWordPosix[j]+NumWordMaxLength] ) )
{
buff = pText[i];
cout.put(buff);
}
}
cout<<endl;
}
delete [] MaxWordPosix; // Освобождение памяти от массива указателей
MaxWordPosix=NULL;

for(int i=0; i<500; i++) // Обнуление адресов массива указателей
pBeginWords[i]=NULL;
delete [] *pBeginWords; // Освобождение памяти от массива указателей
}
else cout<<"Файл для чтения \\"TextFile.dat\\" не был найден!!!"<<endl;
system("pause");
}

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

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

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

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