Сортировка слова в лексикографическом порядке
методом “пузырька”.
Ввод строки в массив.
//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