Перевод букв из верхнего регистра в нижний и наоборот.




int tolower(int c) нижний регистр

int toupper(int c) верхний регистр

Функции возвращают преобразованную букву.

 

Пример 5: Преобразовать символы к верхнему регистру (работа с указателем).

Функция toupper() преобразует свой аргумент к верхнему регистру.

char str[] = "Small text",*p;

for (p=str; *p!=0; p++)

printf ("%c",toupper(*p));

4. Работа со строками - <string.h>

Различают две группы функций:

- Функции, начинающимися с str, работают с С-строками (\0 - конец строки).

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

 

Общее правило:

функции, модифицирующие один из аргументов (напр.: копирование, слияние) всегда изменяют первый аргумент.

Функции группы str С-строки (\0 - конец строки).

char *strcpy(char *s1, char *s2)

копирует строку s2 в s1. Возвращает s1.

char *strcat(char *s1, char *s2)

объединяет строки s1 и s2 (дописывает s2 в s1). Возвращает s1.

int strcmp(char *s1, char *s2)

сравнивает строки. Возвращает 0 для совпадающих строк, отрицательное значение при s1<s2 и положительное при s1>s2.

int strlen(char *s1)

Возвращает длину строки s1

 

char *strchr(char *s1, char sim)

Возвращает указатель на первое вхождение символа sim в строку s1

 

char *strstr(char *s1, char *s2)

Возвращает указатель на первое вхождение строки s2 в строку s1

 

Аналогичные функции с контролем длины строки:

char *strncpy(char *s1, char *s2, size_t n)

копирует строку s2 в s1, но копируется не более n символов. Возвращает s1.

char *strncat(char *s1, char *s2, size_t n)

int strncmp(char *s1, char *s2, size_t n)

char *strerror(size_t n)

возвращает строку сообщения, соответсвующего ошибке с номером n.

- Функции группы mem аргументы -массивы символов, позволяют работать и с нулевыми байтами.

 

void *memcpy(void *dst, void *src, size_t len)

копирует len байтов (включая нулевые) из src в dst. Возвращает dst.

 

void *memove(void *dst, void *src, size_t len)

делает то же, что и memcpy. Это - единственная функция, которая правильно копирует перекрывающиеся объекты.

 

int memcmp(void *s1, void *s2, size_t len)

аналог strcmp, но с учетом нулевых байтов.

 

void *memset(void *s, int c, size_t len)

заполняет первые len байтов массива s символом c.

 

Пример 6: Выполнить различные действия с двумя строками, введенными с клавиатуры.

#include "stdafx.h"

#include <iostream>

using namespace std;

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

{char s1[80], s2[80];

int k=0,k1=0,k2=0,i;

/ / ввод строк с клавиатуры

cout<<"\nstr1->"; gets(s1);

cout<<"\nstr2->"; gets(s2);

// определение длины строк

cout<< "Длина строки 1: "<< strlen(s1)<<endl;

cout<< "Длина строки 2: "<< strlen(s2)<<endl;

// сравнение строк

if (!strcmp(s1,s2)) cout<<"Строки равны"<<endl;

else {cout<<"Строки не равны: ";

if (strcmp(s1,s2)>0) cout<<"cтрока1 больше строки2"<<endl;

else cout<<"cтрока2 больше строки1"<<endl;

}

// объединение строк

strcat(s1,s2);

cout<<s1<<endl;

// поиск эталона-символа в строке

if (strchr(s1,'!')) cout<<"! есть в "<<s1<<endl;

cout<<"символ р строит на "<<(strchr(s1,'р')-s1+1)<<" месте"<<endl;

// поиск эталона-строки в строке

if (strstr(s1,"ро")) cout<<"ро есть в "<<s1<<endl;

// копирование

Strncpy (s1, s2, 3); // копируем 3 символа из s2 в s1

strcpy (s2,"Копирование!");

cout<<"s1: "<<s1<<endl;

cout<<"s2: "<<s2<<endl;

return 0;

}

 

Пример 7: Ввести с клавиатуры несколько строк, запомнить их в массиве.

#include "stdafx.h"

#include <iostream>

#include <clocale>

#include <string.h>

using namespace std;

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

{char text[1000], q[80], *p;

int i, len=0, comlen=0, k;

// ВВОД ТЕКСТА В МАССИВ text С КЛАВИАТУРЫ:

// устанавливаем указатель p на начало массива text

// цикл ввода заканчиваем, когда введена пустая строка

// после записи очередной строки перемещаем указатель (+ длина строки)

for (p=text, k=0; strlen(q)!=0; p=p+len+1,k++)

{ gets(q); // ввод строки с клавиатуры

strcpy(p,q); // копирование в text

len= strlen(q); // определение длины строки

comlen +=len+1; // общая длина текста

}

cout<<"k="<<k<<endl;

cout<<"comlen="<<comlen<<endl;

// посимвольная работа с текстом

for (i=0; i<comlen; i++)

cout<<text[i];

cout<<endl;

// построчная работа с текстом

for (i=0, p=text; i<k; i++)

{ strcpy(q,p);

puts(q);

p=p+strlen(q)+1;

}

return 0;

}

Массивы:

text[1000] – для хранения текста в памяти

q[80] – для одной строки текста (при вводе и выводе)

Переменные:

comlen – общее количество введенных символов (включая символы «конец

строки»)

len – длина строки

k – количество строк

ВАРИАНТЫЗАДАНИЙ.

Общие требования.

1. Ввести данные с клавиатуры так как показано в примере 7:

– Объявить статический массив

– Вводить текст построчно с клавиатуры и также построчно размещать в памяти

– текст содержит латинские буквы, цифры, знаки.

 

2. При выполнении задания:

– использовать указатели

– создавать свои функции

– применять библиотечные функции

 

3. На экран выводить поясняющие тексты.

 

4. Выводить как исходный текст, так и текст после обработки (отформатированный).

 

 

Номер варианта задания Задание
    1,10,19 Ввести с клавиатуры несколько строк, признаком конца ввода считать строку, состоящую из слова «end». Во введенном тексте подсчитать количество цифр. Найти самое длинное и самое короткое слово в тексте, вывести на экран, если таких слов несколько – вывести их все. Вывести текст на экран и отформатировать: – Начать с «красной строки (табуляция) – Каждое предложение начинать с красной строки
  2,11,20 Ввести с клавиатуры несколько строк, признаком конца ввода считать строку, состоящую из знака «.» или «!» Во введенном тексте подсчитать количество пробельных символов. Найти все слова с заданной длиной (число ввести с клавиатуры). Задать длину строки (ввести с клавиатуры) и вывести текст на экран в измененном виде.

 

  3,12,21 Ввести с клавиатуры несколько строк, признаком конца ввода считать строку, состоящую из одного знака «#». Во введенном тексте подсчитать количество строчных символов. Найти все слова длиной больше заданного с клавиатуры значения. Разбить текст на страницы, параметры – длина страницы (число строк) и длина строки – вводятся с клавиатуры, слова - без переносов.
  4,13,22 Ввести с клавиатуры несколько строк, преобразовать введенный текст к верхнему регистру, признаком конца ввода считать строку, состоящую из слова «finish». Во введенном тексте подсчитать количество слов. Вывести текст на экран и отформатировать: Выровнять правый край текста за счет увеличения промежутков между словами текста.
  5,14,23 Ввести с клавиатуры несколько строк, признаком конца ввода считать строку, состоящую из слова «stop». Во введенном тексте подсчитать количество заглавных символов. В каждой строке найти самое длинное и самое короткое слово. Вывести текст на экран и отформатировать: В строке должны быть слова одинаковой длины, начать с самого короткого слова.
  6,15,24 Ввести с клавиатуры несколько строк, преобразовать введенный текст к верхнему регистру, признаком конца ввода считать строку, состоящую из слова «ок». В четных строках подсчитать количество слов. Вывести текст на экран и отформатировать: Реализовать функцию «выровнять строки по центру».
    7,16,25 Ввести с клавиатуры несколько строк, преобразовать введенный текст к нижнему регистру, признаком конца ввода считать строку, состоящую из одного знака «%». В нечетных строках подсчитать число цифр. Вывести текст на экран и отформатировать: Разбить текст на страницы, параметры (длину строки и количество строк) ввести с клавиатуры.
  8,17,26 Ввести с клавиатуры несколько строк, признаком конца ввода считать строку, состоящую из одной точки. Во введенном тексте подсчитать количество заглавных и строчных символов. Вывести текст на экран и отформатировать: После точки начинать с «красной строки»
  9,18,27 Ввести с клавиатуры несколько строк, состоящих из латинских букв, цифр и знаков препинания, признаком конца ввода считать строку, состоящую из слова «last». Во введенном тексте подсчитать количество цифр. Вывести текст на экран и отформатировать: Каждая последующая строка должна содержать на одно слово больше: в первой строке вывести одно слово, во второй – два и т.д.

 



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2016-08-20 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: