Вариант 9, работа со строками, расширение файла должно быть DAT, в выделенном предложении – поочередно выделяет все символы, отличные от букв и пробела.

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

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

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

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

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

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

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

 
void Find_end_sentence(char *Text,int *end_sentence, int &Num_sentence, int Num); 
void Find_end_sentence(char *Text,int *begin_sentence,int *end_sentence,int *Num_sentence, int Num); 
void Find_symbols(char *Text,int *begin_sentence,int *symbols,int *end_sentence,int *Num_sentence, int Num,int *NumSymbols, int &AllNumSymbols); 

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

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

 
#pragma once 
#include <iostream> 
#include <fstream> 
#include <cctype> 
using namespace std; 
void Find_end_sentence(char *Text,int *end_sentence, int &Num_sentence, int Num) 
{ 
for(int i(0),j(0); i<Num; i++) 
{ 
if( Text[i] == \'?\' || Text[i] == \'.\' || Text[i] == \'!\' ) 
{ 
end_sentence[j] = i; 
Num_sentence++; 
j++; 
} 
else if( Text[i] == \'\\0\' ) 
{ 
break; 
} 
} 
} 
void Find_end_sentence(char *Text,int *begin_sentence,int *end_sentence,int *Num_sentence, int Num) 
{ 
for(int i(0),j=0; i<Num && j<*Num_sentence; i++) 
{ 
if(Text[i] == \'\\0\') break; 
else if( (isupper(Text[i]) && !i) || (isupper(Text[i]) && i ) ) 
{ 
begin_sentence[j] = i; 
i = end_sentence[j]; 
j++; 
} 
} 
} 
void Find_symbols(char *Text,int *begin_sentence,int *symbols,int *end_sentence,int *Num_sentence, int Num,int *NumSymbols, int &AllNumSymbols) 
{ 
for(int i(0),j(0),k(0); i<Num; i++) 
{ 
if( Text[i] == \'\\0\') break; 
else if( !isalpha(Text[i]) && Text[i] != \' \' && Text[i] != \'\\n\' ) 
{ 
symbols[j] = i; 
AllNumSymbols++; 
if( begin_sentence[k] < i && i <= end_sentence[k]) 
{ 
NumSymbols[k]++; 
} 
else 
{ 
k++; 
NumSymbols[k]++; 
} 
j++; 
} 
} 
} 

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

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

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

char Text[Num]; 
int Symbols[Num/2]={0}; 
int NumSymbols[Num/2]={0}; 
int AllNumSymbols=0; 

int Begin_sentence[Num/2]={0}; 
int End_sentence[Num/2]={0}; 
int Num_sentence=0; 

ifstream fin("C:\\\\VC 2012\\\\Function C String library\\\\Variant 9\\\\TextFile.dat"); 

if(fin) 
{ 
fin.getline(Text,1000,\'\\0\'); fin.close(); 

Find_end_sentence( Text, End_sentence, Num_sentence, Num); // Поиск конца предложений 
Find_end_sentence( Text, Begin_sentence,End_sentence,&Num_sentence, Num); // Поиск начала предложений 
Find_symbols(Text, Begin_sentence, Symbols, End_sentence, &Num_sentence, Num, NumSymbols, AllNumSymbols); 

for(int j(0); j<Num_sentence; j++) 
{ 
for(int k(0); k<AllNumSymbols; k++) 
{ 
for(int i(0); i<Num; i++) 
{ 
if(Text[i] == \'\\0\') 
{ 
cout<<"\\n\\nВ "<<j+1<<" предложении найдено "<<NumSymbols[j]<<" символов отличных от букв и пробела.\\n\\n"; 
system("pause"); 
system("cls"); 
break; 
} 
else if( Text[i] == \'\\n\') continue; 


else if( Begin_sentence[j] == i && Begin_sentence[j] < Symbols[k] && Symbols[k] <= End_sentence[j]) 
{ 
cout<<" ["; 
cout.put(Text[i]); 
} 
else if( i == Symbols[k] && End_sentence[j] >= i) 
{ 
if(End_sentence[j] == i) 
{ 
cout<<" < "; 
cout.put(Text[i]); 
cout<<" >]"; 
} 
else 
{ 
cout<<" < "; 
cout.put(Text[i]); 
cout<<" > "; 
} 
} 
else if( End_sentence[j] < i && Symbols[k] > i) 
{ 
j++; 
} 
else if( End_sentence[j] == i && Begin_sentence[j] < Symbols[k] && Symbols[k] <= End_sentence[j]) 
{ 
cout.put(Text[i]); 
cout<<" ]"; 
} 
else cout.put(Text[i]); 
} 
} 
} 
} 
else 
{ 
cout<<"Файл для чтения \\"TextFile.dat\\" не был найден!!!"<<endl<<endl; 
system("pause"); 
} 
} 

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

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

Вариант 9, работа со строками, расширение файла должно быть DAT, в выделенном предложении – поочередно выделяет все символы, отличные от букв и пробела.: 0 комментариев

  1. Извините, но это быдло-код, не соответствующий нынешним стандартам. К тому же, программа работает не правильно.

  2. Цитата: Ivan_DD
    Извините, но это быдло-код, не соответствующий нынешним стандартам. К тому же, программа работает не правильно.


    Каким еще стандартам?! У написания программ, что появились стандарты, не несите чушь. И где вы нашли не корректную работу, напишите.

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

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