ЛАБОРАТОРНАЯ РАБОТА №3 Тема. Обработка текстовой информации. Строковый тип. Цель.

advertisement
ЛАБОРАТОРНАЯ РАБОТА №3
Тема. Обработка текстовой информации. Строковый тип.
Цель.
познакомить студентов с aалгоритмами обработки текстовой информации
получить практический навык по работе со строковыми данными
Цель:
-
Получение навыков по обработке текстовой информации
Изучение возможностей языка по обработке символьной информации
Содержание
ЗАДАНИЕ ......................................................................................................................................1
ВАРАНТЫ ......................................................................................................................................1
Пример Строки и strtok для выделения слов ..............................................................................4
Контрольные вопросы.
1. Как двумя способами объявить указатели на строковое значение?
2. Как изображается строковая константа?
3. Сколько памяти будет выделено переменной S и объясните почему?
сhar S[]=”abcdef”;
4. Как храниться строковое значение в оперативной памяти?
5. Как обратиться к отдельному символу строки?
6. Какие операции применимы к строковым значениям?
7. Как осуществить ввод с клавиатуры символьного значения в С и С++?
8. Найдите ошибки в следующем фрагменте и объясните их:
char s[]="abcdef";
char *s1;
char s2[10];
s2="nnnnnnnnnnn";
s1="mmmmmmmmmm";
9. Разработайте фрагмент программы для сравнения двух строковых значений:
- Без использования функций библиотеки string.h
- C использования функций библиотеки string.h
ЗАДАНИЕ
В первом задании варианта рассматривать строку как массив символов. Функции
библиотеки string не применять
2.
Во втором задании можно применять функции работы со строкой.
Примечание: Словом считать последовательность символов, заключенную между
символами разделителями. Разделителей может быть любое количество.
1.
ВАРАНТЫ
1.
 Даны две строки S1 и S2. Разработать программу, которая удаляет из строки S1 все
символы, встретившиеся в строке S2.
 Дано предложение, заканчивающееся точкой. Слова разделены символами: пробел,
запятая. Сформировать массив из тех слов предложения, которые начинаются и
заканчиваются на одну букву.
2.


Даны два предложения S1 и S2. Найти первый символ, в котором они различаются.
Дано предложение, удалить из него слова, встретившиеся более одного раза.

Дано предложение, состоящее из слов. Слова отделяются пробелами.
Отредактировать предложение: оставить между словами только один пробел.
Дано предложение, состоящее из слов. Определить, сколько раз в предложение
входит первое слово.
3.

4.


Дан текст. Определить входит ли в текст заданный символ, хотя бы один раз. Если
входит, то вывести индекс элемента, иначе –1.
Дан произвольный текст, состоящий из слов. Отредактировать его, оставив между
словами по одному пробелу, а между предложениями по два.
5.


Даны два слова. Определить, равны ли они. Результатом должен быть индекс
элемента, начиная с которого слова не совпадают или -1 если слова совпадают.
Даны два предложения. Вывести слова, общие для этих двух предложений. Если
таких слов нет, то вывести сообщение об этом.
6.


Дан текст. Удалить из текста все повторные вхождения символов, оставив только
первые вхождения.
Дано предложение, состоящее из слов, разделенных знаками препинания.
Определить количество слов равных последнему слову, больших последнего слова.
7.


Дано целое десятичное число. Разработать программу перевода числа в систему
счисления с основанием N(2..16) и представления полученного кода в строковом
формате.
Дан текст программы на языке С++. Вывести все ключевые слова, встретившиеся в
тексте программы.
8.


Дан текст. Разработать программу, которая возвращает индекс последнего
вхождения заданного символа в строку.
Дано предложение, слова в котором разделены пробелами и запятыми. Распечатать
те слова, которые являются обращениями других слов в этом предложении.
9.


Дан текст. Разработать программу, которая анализирует текст, начиная с заданной
позиции К и выводит номер первого найденного пробела. Если пробела нет, то
возвращает 0. Если К выходит за границы длины строки, то вывести –1.
Дано предложение, слова в котором разделены пробелами и запятыми. Распечатать
те пары слов, расстояние между которыми наименьшее. Расстояние – это
количество позиций в которых слова различаются. Например, МАМА и ПАПА,
МЫШКА и КОШКА расстояние этих пар равно двум.

Дан текст. Определить его текущую длину.
10.

Дано предложение. Удалить из предложения все слова, равные заданному слову.

Даны два предложения, которые хранятся в отдельных переменных. Слить их в
одно.
Дан текст, состоящий из слов. Сформировать массив из слов, которые содержат
заданную подстроку.
11.

12.


Дано строковое значение. Перевести его в числовой формат целого числа со знаком
и вывести результат, если это возможно, или вывести индекс символа и сам
символ, который нельзя преобразовать в числовой формат.
Дан текст. Сформировать массив из слов, в которых заданная подстрока
размещается с первой позиции.
13.


Даны два строковых значения S1 и S2. Определить является ли строка S1,
подстрокой строки S2. Вывести индекс, начиная с которого строка S1, полностью
разместилась в строке S2, или –1, если подстрока не найдена.
Дан текст, состоящий из слов. Сформировать массив из слов, в которых заданная
подстрока размещается в конце слова.
14.


Даны два строковых значения S1 и S2. Вывести 1, если строка S1, расположена в
конце строки S2 и 0 в противном случае.
Дано предложение, состоящее из слов. Сформировать массив из слов отличных от
последнего.
15.


Дан текст. Разработать программу, которая копирует часть введенного текста в
другую строку, начиная с заданной позиции и заданной длины. Если такой
позиции нет в исходной строке, то вывести –1, если заданная длина превышает
количество символов в исходной строке, то вывести –2 .
Дан текст, состоящий из слов. Переставить первое и последние слова в тексте.
16.


Даны два слова. Найти те символы первого слова, которые не вошли во второе.
Найденные символы включить в результирующую строку.
Дано целочисленное арифметическое выражение, записанное как строка., в
десятичной системе счисления. Проверить правильность записи выражения и
вычислить значение выражения. Выражение записывается без скобок, операции
выполняются в порядке их приоритетности. Операции: четыре арифметические
операции.
17.


Даны два слова. Сформировать строку тех символов, которые есть в обеих строках.
Дан массив ключевых слов языка С++. Упорядочить их, располагая слова в
алфавитном порядке, используя обменную сортировку.

Дано слово, записанное строчными русскими буквами. Сформировать строку тех
строчных русских букв, которые не вошли в слово.
Дан текст, состоящий из слов. Сформировать массив из слов, у которых первая и
последняя буквы одинаковы. Полученный массив упорядочить, располагая слова в
порядке убывания их длины. Примените обменную сортировку.
18.

Пример Строки и strtok для выделения слов
#include "stdafx.h"
#include "iostream"
#include<conio.h>
#include<string.h>
using namespace std;
void vivod(char *s);
int vivodstrtok(char *s,char *razd);
void main()
{
int k=0;
char s[100];
cout<<"Vvedite text: ";
cin.getline(s,100);
cout<<s<<endl;
//vivod(s);
char razd[]=" .,!?";
if(vivodstrtok(s,razd)==0)
cout<<"net slov na zadannyu bykvy!";
getch();
}
void vivod(char *s)
// вывод слов, которые отделяются несколькими
пробелами и перед текстом может быть несколько пробелов
{
int i=0;
while(i<strlen(s))
{
while(s[i]==' ' && i<strlen(s) )
i++;
while(s[i]!=' ' && s[i]!='\n'&& i<strlen(s) )
{
cout<<s[i];
i++;
}
//f(s[i]==' ' || s[i]=='\n')
cout<<endl;
if(i<strlen(s))
i++;
}
}
int vivodstrtok(char *s,char *razd)
{
int i=0;
char *p=strtok(s,razd);
while(p!=0)
{
if(*p=='m' || *p=='M')
{
i++;
cout<<p;
}
p=strtok(NULL,razd);
}
return i;}
Библиотека функций для работы со строкой string.h
Download