Главная страница
Навигация по странице:

  • Методические указания к выполнению работы

  • ывфыв. Методические указания к выполнению работы в c имеется библиотека, содержащая ряд функций по обработке строк


    Скачать 73.5 Kb.
    НазваниеМетодические указания к выполнению работы в c имеется библиотека, содержащая ряд функций по обработке строк
    Анкорывфыв
    Дата19.12.2022
    Размер73.5 Kb.
    Формат файлаdoc
    Имя файлаlab5_2022.doc
    ТипМетодические указания
    #852886

    Лабораторная работа 5. Обработка строковых данных
    Общая постановка задачи для всех вариантов.

    Задан текст, состоящий из слов, разделенных пробелами или запятыми. Длина текста не больше 200 символов, могут быть использованы любые символы. Словом считать последовательность символов, не содержащую пробел (запятую).

    Примечание: рекомендуется использовать функции модуля string.h.

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

    Методические указания к выполнению работы


    В C++ имеется библиотека , содержащая ряд функций по обработке строк.

    Приведем описание этих функций и примеры их применения.

    strcpy (результирующая строка, исходная строка)

    Функция копирует исходную строку в результирующую строку

    Пример.

    #include

    #include

    void main (){

    char str1[]="Sample string";

    char str2[40];char str3[40];

    strcpy (str2,str1);

    strcpy(str3,"copy successful");

    cout<<"str1: "<
    <
    Результат:str1:Sample string str2:Sample string str3: copy successful

    strcat ( результирующая строка, исходная строка )

    Функция присоединяет исходную строку к концу результирующей строки.
    Пример

    #include

    #include

    void main (){char str[80];

    strcpy (str,"strings ");

    strcat (str,"have been ");

    strcat (str,"concatenated.");

    cout<
    Результат: strings have been concatenated.

    int strcmp ( строка1, строка2 );

    Функция сравнивает посимвольно две строки и возвращает целое число в соответствии с таблицей:

    Возвращаемое значение

    Назначение

    <0

    строка1 меньше чем строка2

    =0

    строка1 равна строка2

    >0

    строка1 больше чем строка2


    Пример.

    #include

    #include

    void main (){

    char szKey[] = "apple";

    char szInput[80];

    do {

    cout<<"Which is my favourite fruit? ";

    cin>>szInput;

    } while (strcmp (szKey,szInput) != 0);

    cout<<"Correct answer"<
    Результат:
    Which is my favourite fruit? orange

    Which is my favourite fruit? apple

    Correct answer!

    strcspn ( строка1, строка2 )

    Функция ищет в строке1 символы, принадлежащие строке2 и возвращает номер символа строки1, являющийся первым встретившимся символом строки2 (нумерация начинается с 0) или длину строки1, если такого символа нет

    Пример

    #include

    #include

    void main (){ char str1[] = "fcba73";

    char str2[] = "1234567890"; int i;

    i = strcspn (str1,str2);

    cout<<"The first number in str1 is str1[“<<",i<<”]”;}

    Результат:
    The first number in str1 is str1[4]

    strlen ( строка)

    Функция возвращает длину строки.

    Пример.

    #include

    #include

    void main (){

    char szInput[256];

    cout<<"Enter a sentence: "; cin>>szInput;

    cout<<"Sentence entered is “<<

    strlen(szInput)<<” characters long"<
    Результат:
    Enter sentence: just testing

    Sentence entered is 12 characters long

    strncat ( результирующая строка, исходная строка, размер)

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

    Пример.

    #include

    #include

    void main (){ char str1[20]; char str2[20];

    strcpy (str1,"To be "); strcpy (str2,"or not to be");

    strncat (str1, str2, 6);cout<
    Результат:
    To be or not

    strncpy (результирующая строка, исходная строка, размер)

    Функция копирует из исходной строки в результирующую строку число символов, определяемое третьим параметром.

    Пример.

    #include

    #include

    void main (){ char str1[]= "To be or not to be";

    char str2[6]; strncpy (str2,str1,5); cout<
    Результат:
    To be

    strchr ( строка, символ )

    Функция возвращает указатель на первый встретившийся символ в строке или NULL, если такого символа нет

    Пример.

    #include

    #include

    void main (){

    char str[] = "This is a sample string";

    char *pch;

    cout<<"Looking for 's' character in .."<
    pch=strchr(str,'s');

    while (pch!=NULL)

    {cout<<"found at "<

    pch=strchr(pch+1,'s'); }}

    Результат:

    Looking for 's' character in "This is a sample string"...

    found at 4

    found at 7

    found at 11

    found at 18

    strspn ( строка1, строка2 ) Функция возвращает длину начальной подстроки строки1, содержащей символы строки2.

    Пример.

    #include

    #include

    void main (){int i;

    char strtext[] = "129th";

    char cset[] = "1234567890";

    i = strspn (strtext,cset);

    cout<<"Length of initial number is "<
    Результат:

    Length of initial number is 3

    strstr ( строка1, строка2 )

    Функция возвращает указатель на первую встречаемость строки2 в строке1 или NULL, если она не встретилась.

    Пример:

    #include

    #include

    void main (){char str[] ="This is a simple string";

    char * pch;

    pch = strstr (str,"simple");

    strncpy (pch,"sample",5);

    cout<
    Результат:

    This is a sample string

    Строковое представление чисел не позволяет выполнять над ними арифметические операции. Поэтому необходимо преобразовать число из строковой формы в числовую форму. В библиотеке stdlib.h имеется функция atoi, предназначенная для преобразования строки в число. Ее формат:

    atoi(строка).

    Эта функция возвращает число.
    strtok( char * string, const char * delim );

    Функция strtok выполняет поиск слов в строке string. Последовательность вызовов этой функции разбивают строку string на слова, которые представляют собой последовательности символов, разделенных символами разделителями

    char str[] = "Особенности национальной рыбалки - художественный, комедийный фильм.";

     char delims[] = "., ?;!";
     std::cout << "Разделение строки "" << str << "" на слова\n";

    char * pch = strtok (str," ,.-"); // во втором параметре указаны разделитель (пробел, запятая, точка, тире)

     

      while (pch != NULL)                         // пока есть слова

      {

          std::cout << pch  << "n";

          pch = strtok (NULL, " ,.-");

      }

    Пример программы.

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

    Словесный алгоритм:


    1. Ввод строки x

    2. m=0 (число слов, номер слова)

    3. Выделение памяти для y. y=”” (очистка строки результата)

    4. Выделение памяти для rez (rez – промежуточное поле для получения букв слова в обратном порядке).

    5. adrz=strstr(x,",") (Запоминание в adrz адреса символа строки x, равного ‘,’)

    6. Если adrz=NULL (нет такого символа), то adrz=strstr(x,".") (Запоминание в adrz адреса символа строки x, равного ‘.’)

    7. strncpy(slovm,x,adrz-x) (Копирование в slovm части строки x до запятой или до точки)

    8. slov m,adrz-x='\0' (Помещение в конец slovm символа конца строки)

    9. lengm=adrz-x (Длина строки)

    10. Вывод m, slovm,lengm

    11. i = strspn (slovm,cif) (Запоминание в i количества символов slovm, совпадающих с символами строки cif - цифры)

    12. Если i=lengm, то

    12.1.slovcif=результату преобразования slov из строки в число

    12.2.Вывод slovcif3

    иначе

    12.3. Очистка поля rez

    12.4. j=0

    12.5. Для jm выполнить

    12.5.1. rezj=slovm,leng[m]-j-1 (изменение порядка символов)

    12.5.2. j=j+1

    12.6. strcat(y,rez) (присоединение к y перевернутого слова rez)

    12.7. strcat(y,”,”) (присоединение к y запятой)

    1. m=m+1

    2. strcpy(x,adrz+1) (Копирование в x части после запятой)

    3. Если строка x не пуста, то п. 5

    4. Вывод y



    Тесты:

    Номер теста

    Назначение теста

    Входные данные

    Выходные данные

    1

    В строке есть цифровые и нецифровые слова

    x=abc,xyzt,20,5.

    Word number 1 abc length 3

    Word number 2 xyzt length 4

    Word number 3 20 length 2

    Cube 8000

    Word number 4 5 length 1

    Cube 125

    cba,tzyx,

    2

    В строке есть только цифровые слова

    x=20,5.


    Word number 1 20 length 2

    Cube 8000

    Word number 2 5 length 1

    Cube 125

    3

    В строке есть только нецифровые слова

    x=abc,xyzt.

    Word number 1 abc length 3

    Word number 2 xyzt length 4

    cba,tzyx,



    Программа:

    #include

    #include

    #include

    void main(){char x[200],*slov[20],*rez,*y;

    char cif[] = "1234567890";

    int i,j,m,n,k,leng[20],slovcif,cub[20];

    char *adrz;

    cout<<"Input x"<
    cin>>x;

    m=0;n=0;k=0;y=new char[200];strcpy(y,"");

    rez=new char[10];

    do {

    adrz=strstr(x,",");

    if (adrz==NULL)

    adrz=strstr(x,".");

    slov[m]=new char[m];

    strncpy(slov[m],x,adrz-x);

    leng[m]=adrz-x;

    slov[m][leng[m]]='\0';

    cout<<"Word number "<
    i = strspn (slov[m],cif);

    if (i==leng[m]){slovcif=atoi(slov[m]); cub[k]=slovcif*slovcif*slovcif;

    cout<<"Cube "<
    else{strcpy(rez,"");for (j=0;j
    m++;

    strcpy(x,adrz+1);} while(strcmp(x,"")!=0);

    cout<
    }


    Индивидуальные варианты

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

    2. Найти одинаковые пятисимвольные слова и подсчитать число их повторений. Найти первое цифровое слово и уменьшить его значение в 3 раза.

    3. Найти 4-символьные слова, проверить на присутствие в них цифр, слова с цифрами распечатать, найти слова, которые повторяются в тексте. Найти первое цифровое слово и возвести его значение в куб.

    4. Удалить каждое четное слово, продублировать каждое нечетное слово, заменив все вхождения букв 'д ' на букву 'т'. Найти первое цифровое слово и умножить его значение на 5.

    5. Слова в строке проверить на отсутствие 'нецифровых литер'; слова с нецифровыми литерами распечатать и удалить из исходной строки. Найти первое цифровое слово и разделить его значение на 12.

    6. Составить массив из 4-символьных слов, расположив по алфавиту. Найти первое цифровое слово и возвести его значение в квадрат.

    7. Составить новую строку из слов в строке, состоящих только из цифр. Перед цифрами слова может стоять знак + или - . Найти сумму чисел (цифровых слов), имеющих знак '-' и количество положительных чисел .

    8. Сформировать новую строку, в которую включить слова по возрастанию их длины. Найти первое цифровое слово и изменить его значение, поделив на 100.

    9. Сформировать новую строку, в которой нет повторяющихся слов. Найти первое цифровое слово и возвести его значение в куб.

    10. Сформировать новую строку, в которую включить только "цифровые " слова, найти слово с наибольшим значением.

    11. Сформировать новую строку, в которую нужно включить слова, состоящие только из латинских букв и не содержащие букв 'q', 'r' и 'u'. Найти два первых цифровых слова и возвести их значения в куб.

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

    13. Сформировать новую строку, в которую включить только пятисимвольные слова с удалением из них литеры "А". Найти первое цифровое слово и возвести его значение в квадрат.

    14. Сформировать новую строку, в которую включить только 4-символьные слова, с заменой "А" на "О". Hайти первое цифровое слово и возвести его значение в куб.

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

    16. Поменять местами слова, "равноудаленные" от концов строки, найти первое цифровое слово и возвести его значение в квадрат.

    17. Переставить местами слова 1-2, 3-4, и так далее. Найти сумму цифровых чисел.

    18. Удалить из строки 4-символьные слова, в которых есть буквы "а" или "о", найти сумму всех цифровых слов.

    19. Дополнительно ввести строку В. Распечатать слова из первой строки, если они имеются во второй, найти сумму цифровых слов.

    20. Распечатать слова "пеpевеpтыши", найти сумму цифровых слов текста.

    21. Сформировать новую строку из 4-символьных слов, переставив буквы в обратном порядке (роза азоp и т.д.).

    22. Сформировать новую строку, в которую включить 5-символьные слова, если в них литеры расположены "по возрастанию".

    23. Удалить в строке слова, в которых имеются повторяющиеся литеры.

    1. Отредактировать заданное предложение, удаляя из него слова, которые встречаются в предложении n раз.

    2. Даны три предложения. Определить самое длинное из слов первого предложения, которое есть во втором и третьем предложении.

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

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

    5. На основании предоставленного отрывка текста определить 3 наиболее часто встречаемых символа в ней. Пробелы нужно игнорировать (не учитывать при подсчете).

    6. Требуется определить индексы первого и последнего вхождения каждой буквы в строке.

    7. Определить наименьшую длину слова в заданной строке. Слова считать отделенными друг от друга одним или несколькими пробелами. Если слов с наименьшей длинной несколько вывести их число.

    8. В строке найти последовательности цифр, каждую из них считать числом в той системе счисления, которая соответствует первой цифре, заменить числа в строке символами с кодами, полученными из этих чисел. Пример: aaa2010101bbb8343ccc – двоичная и восьмиричная системы счисления.

    9. Вывести текст, составленный из последних букв всех слов, цифровые слова сформировать в отдельную строку.


    написать администратору сайта