Сортировка слова в лексикографическом порядке

методом “пузырька”.

Ввод строки в массив.

//arb2014_gusen_8_5

#include <iostream.>

using namespace std;

 

const m=20;

void main()

{

char str[m], k;

int i,j,n;

bool fl = true;

cout << "Enter string:";

cin >> str; // Можно ввести не более 19 символов.

// Подсчет количества символов в строке.

// Символ ‘\0’ – признак конца строки.

for(n=0; str[n]!='\0'; n++);

 

for(i=0;i<n && fl;i++)

{

fl = false;

for(j=0;j<n-i-1;j++)

if (str[j] > str[j+1])

{

k=str[j];

str[j]= str[j+1];

str[j+1] = k;

fl = true;

}

}

cout << str << endl;

// Вывод С-строки (последний символ - ‘\0’)

}

 

Задача 7

 

Дан текст, состоящий из слов, разделенных пробелами и

Заканчивающийся точкой.

Вывести на экран этот текст, печатая каждое слово в обратном

Порядке.

Чтение производится в буфер (массив) по одному слову.

Длина каждого слова не должна превышать 29 символов.

 

//arb2014_gusen_8_6

#include <iostream>

#include <cstring> // Библиотека С-строковых функций (‘\0’)

using namespace std;

 

void main()

{

char buf[30];

int n;

bool fl=true;

cout << "Enter text :";

while(fl)

{ cin >> buf; // Чтение слова в массив.

n = strlen(buf); // Возвращает кол-во символов в строке.

if (buf[n-1] == '.')

{ n--;

fl=false;

}

for (int i=n-1; i>=0; i--)

cout << buf[i];

if (fl)

cout << ' ';

}

cout << '\n';

}

 

Задача 8

 

Дан текст, состоящий из слов, разделенных пробелами и

Заканчивающейся точкой. Подсчитать, сколько слов содержит

Ровно две буквы m.

 

Посимвольный ввод входного текста.

Длина слов не не ограничена.

Функция get() вводит очередной символ из входного потока

и возвращает его в качестве своего значения.

Функция get(f) вводит символ в переменную f.

 

//arb2014_gusen_8_7

#include <iostream>

using namespace std;

 

void main()

{

char symb;

int count_word=0,count_let=0;

cout << "Enter text:";

symb=cin.get(); // Ввод символа (в том числе и пробела)

while (symb != '.')

{

if (symb==' ')

{

if (count_let==2) count_word++;

count_let=0;

}

else

if (symb=='m') count_let++;

symb=cin.get(); // Экв. cin.get(symb);

}

if (count_let==2) count_word++;

cout << "Word count = " << count_word << '\n';

}

// Другой вариант решения:

// Заголовок цикла while ((symb=cin.get()) != '.') и

// удалить операторы symb=cin.get();

Задача 9

 

Дан текст, состоящий из строк и заканчивающейся пустой

строкой (‘\n’). Если последний символ строки цифра N, то

первые N символов строки заменить символом &.

Функция getline(buf,size,symb) читает символы из входного

потока, пока не встретится символ symb (включая и его).

Будет прочитано size-1 символов, если symb не встретится.

Вместо symb (или в конце строки) подставляется ‘\0’.

Результат чтения помещается в массив buf.

и возвращает его в качестве своего значения.

//arb2014_gusen_8_8

#include <iostream>

#include <string>

using namespace std;

void main()

{

const size=100;

char buf[size];

int n,i,lstr;

cout << "Enter text:\n";

while(1)

{

cin.getline(buf, size, '\n');

if (buf[0] == '\0')

break;

lstr=strlen(buf);

if (buf[lstr-1] >= '1' && buf[lstr-1] <= '9') // Если цифра.

n = buf[lstr-1] - '0';

else

n = 0;

for(i=0; i<n && i<lstr; i++)

buf[i] = '&';

cout << "Result :" << endl << buf <<endl;

cout<< "Enter new line or press 'Enter' :"<<endl;

}

}

Задача 10

 

Подсчитать количество строк, введенных с экрана терминала.

 

Ввод конца файла с экрана терминала: <Ctrl>z в первой позиции

новой строки и <Enter>

Функция read(buf, size) читает в массив buf или size символов,

или меньшее количество.

Если читается конец файла, то функция gcount() возвращает количество прочитанных символов.

 

//arb2014_gusen_8_9

#include <iostream>

#include <cstring>

using namespace std;

 

void main()

{

const size=10;

char buf[size];

int n,i,count=0;

cout << "Enter text:"<<endl;

while(!cin.eof())

{

cin.read(buf, size);

n=cin.gcount();

for(i=0; i<n; i++)

if(buf[i]=='\n')

count++;

}

cout << "Number of line =" << count <<'\n';

}

 

 

Лекция №11