Читайте также:
|
|
Образец выполнения задания.
Задача: Определить количество слов в тексте, для которых выполняется следующее свойство: слово содержит нечетное количество гласных букв.
Этапы выполнения задания.
I Определение исходных данных: переменная St (исходный текст).
II Определение результатов: k – количество слов, удовлетворяющих условию задачи.
III Алгоритм решения задачи.
1 Ввод исходных данных.
2 Просматриваем строку и выделяем из строки слова (наборы символов между двумя разделителями). Просматриваем все символы выделенного слова и считаем гласные буквы (счетчик n). Проверяем, является ли количество гласных букв нечетным числом, если да, то увеличиваем счетчик k.
a) Для выделения слова из строки сначала удаляем разделители в начале строки, затем, начиная с первого символа отличного от разделителя до первого разделителя, вырезаем часть строки – получаем слово. Повторяем действия до тех пор, пока не останется пустая строка.
b) Для того, чтобы проверить является ли символ гласной буквой, создадим строку, состоящую из всех гласных букв, и будем определять позицию текущего символа слова в строке из гласных букв. Если позиция текущего символа в этой строке отлична от npos, то символ – гласная буква, иначе нет.
3 Вывод результата.
IV Описание переменных:
Переменная st имеет тип string, также тип string будут иметь переменные g, содержащая все гласные буквы и переменная x, предназначенная для выделения слов. Переменные i,j – переменные цикла, а также счетчики n, k будутиметь тип int. Разделитель r имеет тип char.
V Программа:
#include <iostream>
#include <string>
#include <windows.h>
#include <conio.h>
using namespace std;
int main()
{
unsigned int i,k,n,j;
string st,g("aoueyi"),x;
char r;
//Русификация консоли.Для правильного отображения символов нужно в
//свойствах консольного окна на вкладке Шрифт выбрать шрифт Lucida
// Console
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
cout<<"введите разделитель - r"<<endl;
r=_getch(); // на экране при вводе его не видно!!!!
cout<<r<<endl; //выод разделителя на экран
cout<<"введите строку текста - St"<<endl;
getline(cin,st);
i=0;k=0;
while (st.length()!=0)
{ while ((st[0]==r)&&(st.length()!=0)) //удаление разделителя
st.erase(0,1);
//формирование слова
x=st.substr(0,st.find(r));
//удаление слова из исходной строки
st.erase(0,st.find(r));
//подсчет гласных букв
n=0;
for (j=0;j<x.length();j++)
if (g.find(x[j])!=string::npos)
n++;
//проверка количества гласных букв на нечетность
if (n%2==1)
k++;
}
cout<<"количество слов "<<k<<endl;
}
VI Тестирование
1 Запустите программу и введите значение
r=’ ‘{разделитель – пробел}
st=Кто успел, тот и съел
Проверьте, результат должен быть следующим:
Количество слов 4
В слове ‘кто’ – 1 гласная буква, в слове ‘успел’ –2, в слове ‘тот’ – 1, в слове ‘и’ – 1, в слове ‘съел’ – 1.
2 Заполните таблицу
St | Разделитель | Результат |
1. Солнце светит | _ (пробел) | |
2. Да,да,да,беда | , (запятая) | |
3. //что?//где?//когда?//// | / | |
4. //что?//где?//когда?//// | ? |
3 Будет ли работать программа, если ввести текст на английском языке? Почему? Какие изменения необходимо внести в программу для работы с английским текстом? Подберите тесты для проверки программы.
4 Измените программу так, чтобы можно было работать с текстом, как на русском, так и на английском языке.
5 Можно ли выделять слова из строки по-другому?
Дата добавления: 2015-07-21; просмотров: 46 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Этапы выполнения задания. | | | Индивидуальные задания. |