КАТЕГОРИИ:
АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника
|
Пример программы. //Тема: работа с С-строками.
//Тема: работа с С-строками. //Ввести строку. Между соседними словами - не менее одного пробела. Перед первым //и за последним словом строки может быть произвольное число пробелов. //Вывести слова в алфавитном порядке. //Слова выводятся в исходном виде #include <iostream.h> #include <conio.h> #include <string.h> #include <stdlib.h> #include <ctype.h> const int RAZ = 80 ; //максимальная длина строки typedef unsigned char telem ; //объявляем тип элементов строки //исходная строка м.б. с кириллицей typedef telem tmas[RAZ] ; //объявляем тип "символьный массив" typedef tmas tmatr[RAZ / 2] ; //объявляем тип "матрица слов"
void sort(int n, tmatr mas, tmatr mas1) ; int vid_slov(tmas isx, tmatr slova) ; void output(int n, tmatr slova) ; void propis(tmas isx) ;
int main() {tmas st , //исходная строка st_kop ; //копия исходной строки tmatr slova , //массив исходных слов slova_kop ; //массив "прописных" слов int n ; //число найденных слов clrscr() ; cout << "Ввести строку. Вывести все слова этой строки по алфавиту.\n" ; cout << "Введите строку\n" ; cin.getline(st, RAZ) ; //функция вводит всю строку, включая //пробелы и символ \n, который заменяется символом \0 strcpy(st_kop, st) ; //копируем строку
propis(st_kop) ; //заменяем в копии все буквы на прописные
n = vid_slov(st, slova) ; //выделяем слова в исходной строке
vid_slov(st_kop, slova_kop) ; //выделяем слова в "прописной" строке
sort(n, slova_kop, slova) ; //сортируем слова по алфавиту
output(n, slova) ; //выводим слова по алфавиту
cout << "\nДля окончания работы нажмите Enter->" ; getch() ; return 0 ; }
//сортировка слов по алфавиту void sort(int n, tmatr slovo_kop, tmatr slovo) {int i, fl = 1, b = 0 ; tmas pr ;
while(fl) {fl = 0 ; for(i = 0; i < n - 1 - b; i++) {if(strcmp(slovo_kop[i], slovo_kop[i + 1]) > 0) {strcpy(pr, slovo_kop[i]) ; //переставляем "прописные" слова strcpy(slovo_kop[i], slovo_kop[i + 1]) ; strcpy(slovo_kop[i + 1], pr) ;
strcpy(pr, slovo[i]) ; //переставляем исходные слова strcpy(slovo[i], slovo[i + 1]) ; strcpy(slovo[i + 1], pr) ;
fl = 1 ; } } b++; } }
//выделяем из исходной строки слова и формируем из них массив int vid_slov(tmas st, tmatr slova) {int i = 0, j = 0 ;
while(st[i]) {int k = 0 ; while(st[i] == ' ') i++ ; while(st[i] != ' ' && st[i]) {slova[j][k] = st[i] ; k++ ; i++ ; } slova[j][k] = '\0' ; j++ ; } return j ; }
//вывод выделенных слов void output(int n, tmatr slova) {int i = 0 ;
cout << endl ; while(i < n) {cout << slova[i] << " " ; i++ ; } }
//преобразование всех букв в прописные void propis(tmas st) {int i=0 ;
while(st[i]) {if(st[i] >= 'a' && st[i] <= 'z' || st[i] >= 'а' && st[i] <= 'п') st[i] -= 32 ; else if(st[i] >= 'р' && st[i] <= 'я') st[i] -= 80 ; i++ ; } }
Лабораторная работа №9
|