Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Форма отчета




Строки как специальный класс string

Do

Применение функций работы со строками для обработки символьных массивов

Изучение способов формирования строк в языке Си

· Набрать и отладить программу:

int main(int argc, char* argv[])

{

char Arr1[25];

char Arr2[]={"Second string!"};

char Arr3[]={'T','h','i','r','d',' ',

's','t','r','i','n','g'};

char *Arr4="Fouth string";

cout<<"\nEnter string: \"First string\": ";

cin>>Arr1;

cout<<"\nString 1: "<<Arr1; // Оператор 1

cout<<"\nString 2: "<<Arr2; // Оператор 2

cout<<"\nString 3: "<<Arr3; // Оператор 3

cout<<"\nString 4: "<<Arr4; // Оператор 4

return 0;

}

· Проанализировать результат работы программы и ответить на вопрос, почему Оператор 2 и Оператор 4 выводят на экран свои фразы полностью, а оператор 1 – только ее часть.

· Почему Оператор 3 выводит свою фразу своей строки и чужую.

· Что нужно сделать, чтобы Оператор 3 выводил только свою фразу.

 

· Набрать и отладить программу заполнения числового массива из символьной строки:

int main(int argc, char* argv[])

{

char str[]="2, 75.3, 24.45, 55, 0, 0.37";

char *ptr=str; //Оператор 1

float Arr[10];

int i=0;

printf("\nИсходная строка:\n%s\n",str);

{

Arr[i]=atof(ptr); //Оператор 2

i++;

if (i>9) break;

}

while(ptr=strchr(ptr,','),ptr++); //Оператор 3

printf(“\nМассив чисел: \n“)

for (int s=0;s<i;s++)

printf("%5.2f\n", Arr[s]);

return 0;

}

· Проанализировать результат работы программы и ответить на вопрос: что происходит при выполнении Операторов 1-3.

Задание II

1. В заданном тексте вставить между словами вместо пробелов запятую и пробел.

2. Задан текст. Вставить заданную последовательность символов после i -гo символа каждого слова.

3. Вывести на экран в один столбец слова из заданного текста оканчивающиеся на согласную букву, в другой столбец – слова, оканчивающиеся на гласную букву, в третий - все остальные слова.

4. Из заданного текста удалить его часть, заключенную в круглые скобки вместе со скобками.

5. Каждое слово текста преобразовать так, чтобы оно читалось наоборот.

6. Из заданной последовательности слов, разделенных запятыми, удалить слова, содержащие введенный с клавиатуры символ.

7. Составить программу подсчета числа слов в телеграмме и выдачи на печать квитанции об ее уплате.

8. Дан текст из n символов. Вывести на экран только строчные русские буквы, входящие в этот текст.

9. Дан текст из строчных латинских букв, за которым следует точка. Вывести на экран дисплея этот текст заглавными латинскими буквами.

10. После каждой гласной буквы х в последовательности слов, разделенных пробелами, вставить буквосочетание рхсх (например, слово порядок преобразуется в поросорярясядоросок).

11. Задан текст. Найти сколько удвоенных букв содержится в данном тексте. Заменить каждую пару символом *.

12. Определить, не используя стандартную процедуру, является ли введенная строка правильной записью целого десятичного числа без знака.

13. В тексте слова разделены пробелами. Определить, кaкой процент слов в тексте заканчивается на русскую букву а.

14. Задан текст на русском языке. Удалить из него пробелы, ь, ъ.

15. В тексте слова разделены пробелами. Определить, кaкой процент слов в тексте заканчивается на русскую букву а.

16. Даны две символьные строки, состоящие только из цифр (длина каждой более 10 символов). Считая, что в этих строках находятся очень длинные целые числа, сформировать третью строку – сумму этих чисел.

17. В заданном тексте найти и вывести на экран удвоенные буквы. Посчитать количество удвоенных гласных букв и количество удвоенных согласных.

18. Дана квадратная матрица, элементами которой являются целые положительные числа. Найти корень квадратный из числа, образованного цифрами чисел, стоящих на главной диагонали.

19. Дан произвольный текст. Отредактировать текст так, чтобы между словами был ровно один пробел, а между предложениям ровно два пробела.

20. Исключить из введенной строки символ, введенный с клавиатуры. Вывести на экран количество удаленных символов и полученную строку.

21. В тексте слова разделены пробелами. Определить, кaкой процент слов в тексте начинается на русскую букву м.

22. Вывести на экран самое длинное слово из заданного текста.

23. Текст задан следующим образом: первый символ – цифра указывающая длину первого слова, за первым словом - вновь цифра указывающая длину второго слова (длина каждого слова не более 9 символов) и т.д. Выписать k -ое слово из текста (число k вводится с клавиатуры).

24. Назовем сложностью предложения сумму количества слов и знаков препинания. Определить сложность заданного предложения.

25. В заданной строке заменить все вхождения одной подстроки на другую. Об е подстроки вводятся с клавиатуры.

26. Выбрать из текста все слова, которые имеют в своем составе по два и более одинаковых символа.

27. Дана квадратная целочисленная матрица, элементами которой являются положительные числа. Найти корень квадратный из числа, образованного цифрами чисел, стоящих на побочной диагонали.

 


Для его работы необходимо в начале программы подключить заголовочный файл string:

#include <string>

В отличии от типа char, string является классом. Более подробно об классах я расскажу позднее, сейчас вам достаточно знать, что классы содержат в себе сразу несколько вещей: переменные, константы и функции для работы с переменными. Это достаточно грубое объяснение, но на первое время вам хватит.

Для создания строки вам необходимо в начале программы написать using namespace std;

Теперь чтоб создать строку достаточно написать:

string s;

Для записи в строку можно использовать оператор =

s="Hello";

Пример работы с классом string:

string name;

cout<<"Enter your name"<<endl;

cin>>name;

cout<<"Hi "<<s<<"!"<<endl;

Но пока вы воспользовались только одной прелестью строк: отсутствием необходимости задавать ее размер. Но кроме этого существует множество функций для работы со строками.

  • s.append(str) - добавляет в конец строки строку str. Можно писать как s.append(переменная), так и s.append("строка");
  • s.assign(str) - присваивает строке s значение строки str. Аналогично записи s=str;
  • int i=s.begin() - записывает в i индекс первого элемента строки
  • int i=s.end() - аналогично, но последнего
  • s.clear() - как следует из названия, отчищает строку. Т.е. удаляет все элементы в ней
  • s.compare(str) -сравнивает строку s со строкой str и возвращает 0 в случае совпадение (на самом деле сравнивает коды символов и возвращает из разность)
  • s.copy (куда, сколько, начиная с какого) - копирует из строки s в куда (там может быть как строка типа стринг, так и строка типа char). Последние 2 параметра не обязательные (можно использовать функцию с 1,2 или 3 параметрами)
  • bool b=s.empty() - если строка пуста, возвращает true, иначе false
  • s.erase(откуда, сколько) удаляет n элементов с заданной позиции
  • s.find(str,позиция) - ищет строку str начиная с заданной позиции
  • s.insert(позиция,str, начиная, beg, count) - вставляет в строку s начиная с заданной позиции часть строки str начиная с позиции beg и вставляя count символов
  • int len=s.length() - записывает в len длинну строки
  • s.push_back(symbol) - добавляет в конец строки символ
  • s.replace(index, n,str) - берет n первых символов из str и заменяет символы строки s на них, начиная с позиции index
  • str=s.substr(n,m) - возвращает m символов начиная с позиции n
  • s.swap(str) меняет содержимое s и str местами.
  • s.size() - возвращает число элементов в строке.

Вот собственно большинство необходимых функция для работы со строками в с++.

Пример

string name,surname,text,fullname,s1,s2,s3,user;

 

user="Petya Petrov";

cout<<"Enter your name"<<endl;

cin>>name;

cout<<"Enter your surname"<<endl;

cin>>surname;

fullname=name;

fullname+=" "; // добавляем пробел

fullname.append(surname);

if (fullname.compare(user)==0) // <=> if (!(fullname.compare(user)))

cout<<"Your are good user"<<endl;

else

cout<<"Bad user"<<endl;

cout<<"enter s1"<<endl;

cin>>s1;

cout<<"enter s2"<<endl;

cin>>s2;

s1.swap(s2);

cout<"new s1: "<<s1<<endl<<"new s2: "<<s2<<endl;

cout<<"Enter big text with your name"<<endl;

cin>>text;

int i=0;

i=text.find("name");

while (i!=-1)

{

text.replace(i,name.length(),name);

s3=text.substr(i,name.length());

cout<<"Replaced: "<<s3<<endl;

i=text.find("name");

}

cout<<"New text:"<<endl<<text<<endl;

text.clear();

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


Лабораторная работа № 13
Исследование способов работы с функциями

ЦЕЛЬ РАБОТЫ:

Выполнение работы: в соответствии с вариантом составить и реализовать программы.

Задание I

1. Ввести предложение, слова в котором разделены пробелам и запятыми. Распечатать это предложение, удалив из него те, которые встретились там более одного раза.

2. Найти множество всех слов, которые встречаются в каждом из двух заданных предложений.

3. Удалить из данной строки те слова, которые уже встречались в ней раньше.

4. Ввести строку, состоящую только из цифр и букв. Распечатать те группы цифр, в которых цифра 7 встречается не более двух раз(группа цифр - это последовательность цифр, обрамленная буквами).

5. Ввести предложение, слова в котором разделены пробелам изапятыми. Распечатать те слова, которые являются обращениями других слов в этом предложении. Если нужных слов нет, сообщить об этом.

6. Распечатать введенное предложение, удалив из него слова, которые состоят менее чем из трех букв.

7. Распечатать введенные слова, отличные от последнего перестроив их следующим образом: перенести последнюю буквукаждого слова в его начало и в каждом слове оставить только первые вхождения каждой буквы.

8. Распечатать строку, которая получается из введенной строки следующим образом: каждая цифра заменяется заключенной в круглые скобки последовательностью литер «+», если цифра четная, или «-», если цифра нечетная. Длина последовательности равна числу, изображаемому цифрой.

9. Ученики зашифровывают свои записки, записывая все слова наоборот. Составить программу, расшифровывающую сообщения учеников.

10. Распечатать введенную строку, удалив из нее слова с нечетными номерами и перевернув слова с четными номерами. Например, из строки 'холодный ручей обжигал лицо и руки' должно получиться 'печур оцил икур'.

11. Ввести строку, в которую могут входить только цифры и буквы. Распечатать те группы букв, в которых буква А встречается не менее двух раз (группа букв - это последовательность букв, обрамленная цифрами).

12. Ввести произвольный текст из нескольких предложений. Вычислить среднее число слов в предложении и среднюю длину предложения.

13. Дан текст, в котором слова разделены пробелами. Создать список слов текста с указанием количества букв в них.

14. Распечатать, начиная с последнего слова, перевернутые слова введенного предложения.

15. Выделить из первой строки все слова, начинающиеся с гласной буквы, а из второй строки - слова, начинающиеся с согласной. Образовать третью строку, состоящую из выделенных слов обеих строк. В новой строке слова должны разделяться двумя пробелами.

16. Из введенного текста распечатать только те слова, которые симметричны (например, радар, анна, шалаш) либо в которых буквы расположены в порядке, обратном алфавитному (например, ток, три, срок).

17. Ученики зашифровывают свои записки, записывая каждое слово текста наоборот. Составить программу, позволяющую шифровать сообщения описанным способом.

18. Для каждого из слов заданного предложения указать, сколько раз оно встречается в предложении.

19. Заменить окончание ing каждого слова, встречающегося в заданном предложении на английском языке, на ed.

20. Дана последовательность слов, разделенных пробелами. Напечатать все слова, предварительно удалив из каждого слова все предыдущие вхождения последней буквы.

21. Из заданной последовательности слов, разделенных запятыми, удалить слова, содержащие введенную с клавиатуры последовательность символов.

22. Дана последовательность слов, разделенных пробелами. Напечатать все слова, предварительно удалив из каждого слова все вхождения последней буквы предыдущего слова.

23. Вывести на экран те слова из введенного текста, в которых нет повторяющихся букв.

24. Задан текст, состоящий из нескольких предложений. Для каждого предложения вывести на экран все слова, отличные от последнего слова текущего предложения.

25. Дана последовательность слов, каждое из которых содержит от 2 до 10 латинских букв. Между соседними словами - пробел, за последним словом- точка. Если слово имеет нечетную длину, то удалить среднюю букву, если четную - перенести первую букву в конец слова. Вывести на экран все преобразованные слова.

26. В заданном тексте слова разделены пробелами или запятыми. Вывести на экран список слов, имеющих в своем составе хотя бы один символ, введенный с клавиатуры.

27. Вывести на экран дисплея список слов, имеющих приставку.

Задания для самостоятельной работы

Следующая группа задач является не обязательной для решения и относится к области криптографии, т.е. к шифровке и расшифровке текстов. Решение задач из этой группы улучшит навыки обработки строковых величин и расширит знания по их применению на практике.

1. Зашифровать текст методом Гронсфельда. Ключом является конечная последовательность цифр, которую записывают подряд над символами шифруемого текста. Цифра, стоящая над литерой, является величиной смещения (т.е. говорит о том, на сколько позиций надо продвинуться вперед по таблице кодировки от текущего символа, чтобы получить для него замену). Протестировать написанную программу.

2. Чтобы зашифровать текст, записанный с помощью русских букв и знаков препинания, его можно переписать, заменив каждую букву непосредственно следующей за ней по алфавиту (буква я заменяется буквой а). Можно обобщить этот способ шифровки - сдвиг производится не на одну букву, а на n букв, где n - данное натуральное число (можно представить себе, что буквы выписаны по кругу, как цифры на циферблате часов). Написать и протестировать программу, которая зашифровывает и расшифровывает данный текст.

3. Пусть по некоторому каналу связи передается сообщение, имеющее вид последовательности нулей и единиц (или аналогично точек и тире). Из-за помех возможен ошибочный прием некоторых сигналов: нуль может быть воспринят как единица и наоборот. Можно передавать каждый сигнал трижды, заменяя, например, последовательность 1, 0, 1 последовательностью 1, 1, 1, 0, 0, 0, 1, 1, 1. Три последовательные цифры при расшифровке заменяются той цифрой, которая встречается среди них по крайней мере дважды. Такое утаивание сигналов повышает вероятность правильного приема сообщения. Написать программу расшифровки некоторого сообщения.

4. Следующий способ предназначен для шифровки последовательностей нулей и единиц (или же, например, точек и тире). Пусть а 1, а 2,..., аn - такая последовательность. То, что предлагается в качестве ее шифра, - это последовательность b 1, b 2,..., bn, образованная по следующему правилу: b 1 = a 1; bi = l, если a i= ai - 1 и bi = 0 в противном случае (i = l, 2,..., n).

Пользуясь изложенным способом, зашифровать и расшифровать данную последовательность нулей и единиц (или точек и тире).

5. Чтобы зашифровать текст, состоящий из 121 буквы, его можно записать в квадратную матрицу порядка 11 по строкам, а затем прочитать по спирали, начиная с центра (т.е. с элемента, имеющего индексы 6, 6). Зашифровать и расшифровать данный текст этим способом. Выбрав некоторую таблицу, разработать способ табличной замены каждого символа другим символом - его шифром. Зашифровать и расшифровать данный текст указанным способом.

Контрольные вопросы

1. Как описывается переменная строкового типа?

2. Является ли string структурированным типом данных?

3. Какое максимальное количество символов может содержать строка?

4. Как осуществляется доступ к элементам строки?

5. Может ли в процессе выполнения программы измениться фактическая длина строки?

6. Что представляет собой тип string:

а) последовательность английских букв;

б) последовательность русских букв;

в) последовательность символов ПЭВМ?

7. Перечислите типовые операции над строками.

8. Как выполняется сравнение строк?

9. Перечислите основные функции обработки строк.

Письменный отчёт должен содержать:

а) название и цель лабораторной работы;

б) номер варианта;

в) решение задачи, включающее в себя:

- условие задачи;

- математическую (информационную) модель;

- алгоритм (блок-схему);

- листинг программы с отметкой преподавателя о её выполнении;

исходный набор данных и соответствующий ему результат.





Поделиться с друзьями:


Дата добавления: 2014-11-16; Просмотров: 1686; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.071 сек.