Задачи на определение позиции заданного символа. Примеры




Массивы. Часть 4. Примеры решения задач с использованием строк символов

В данной теме решаются некоторые задачи с использованием строк символов. При решении этих задач используются стандартные функции из библиотеки «string.h».

Данная тема есть продолжением изучения тем: одномерные массивы и многомерные массивы.

 

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

Пример 1. Задана строка символов. Определить, есть ли заданный символ c в этой строке символов.

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

char S[50]; // строка символов

char c; // искомый символ

int i;

bool f_is; // f_is=true - символ есть в строке, иначе f_is=false

 

// ввод строки S

//...

// ввод символа c

//...

 

for (i=0; i<strlen(S); i++)

if (S[i]==c)

{

f_is = true; // символ c есть в строке S

break;

}

 

if (f_is)

label1->Text = "Символ " + c.ToString() + " есть в строке";

else

label1->Text = "Символа " + c.ToString() + "нет в строке";

В данном примере для определения длины строки S используется функция

strlen(S)

Эта функция возвращает число символов в строке без учета последнего символа ‘\0’. Чтобы использовать эту функцию в Visual C++ нужно в начале файла перед определением пространства имен подключить одну из библиотек <string.h> или <cstring>. Для этого нужно набрать одну из строк:

#include <string.h>

или

#include <cstring>

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

// нахождение числа вхождений символа в строке

char S[50]; // строка символов

char a; // заданный символ

int i;

int k; // результат - число вхождений символа a в строке S

 

// ввод строки S

//...

// ввод символа a

//...

 

k = 0; // в начале обнулить счетчик k

for (i=0; i<strlen(S); i++)

if (S[i]==a)

k++; // увеличить счетчик на 1

Пример 3. В данном тексте посчитать число символов ‘+’ и ‘ — ‘.

// подсчет числа символов в строке

char str[50]; // заданный текст

int i;

int n_p; // результат - число символов '+'

int n_m; // результат - число символов '-'

 

// ввод массива str

//...

 

n_p = 0;

n_m = 0;

for (i=0; i<strlen(str); i++)

{

if (str[i] == '+')

n_p++;

if (str[i] == '-')

n_m++;

}

 

Задачи на замену символов. Примеры

Пример 1. В заданном тексте заменить все символы ‘+’ на ‘ — ‘.

// замена символов

char str[50]; // заданный текст

int i;

 

// ввод текста

//...

 

for (i=0; i<strlen(str); i++)

if (str[i] == '+')

str[i] = '-';

Пример 2. Пусть дано несколько строк текста (двумерный массив символов). Заменить все символы ‘+’ на ‘ — ‘.

// замена символов в массиве строк

char str[5][50]; // заданный массив, который содержит 5 строк

int i, j;

 

// ввод массива из 5 строк

//...

 

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

for (j=0; j<strlen(str[i]); j++)

if (str[i][j] == '+')

str[i][j] = '-';

Пример 3. В заданном тексте заменить все символы ‘+’ на ‘+++’.

Данная задача легко решается с помощью введения вспомогательного массива в текст программы.

// замена символов '+' на '+++'

char str[50]; // заданный текст

int i, j;

char str2[150]; // вспомогательный массив

 

// ввод массива str

//...

 

j = 0; // текущая позиция в массиве str2

for (i=0; i<strlen(str); i++)

if (str[i] == '+')

{

str2[j++] = '+';

str2[j++] = '+';

str2[j++] = '+';

}

else

{

str2[j] = str[i];

j++;

}

 

// добавить символ конца строки

str2[j] = '\0';

strcpy(str, str2); // скопировать str2 в str

В листинге используется функция strcpy() из библиотеки <string.h> (или cstring), которая копирует одну строку в другую.

Пример 4. В заданном тексте заменить последовательность символов ‘…’ на ‘. ‘.

// замена символов '...' на '.'

char str[50]; // заданный текст

int i, j;

char str2[50]; // вспомогательный массив

int d;

 

// ввод массива str

//...

 

j = 0; // текущая позиция в массиве str2

d = strlen(str); // длина строки str

 

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

if (i<d-2)

{

if ((str[i]=='.')&&(str[i+1]=='.')&&(str[i+2]=='.'))

{

str2[j++] = '.';

i+=2;

}

else

{

str2[j++] = str[i];

}

}

else

{

str2[j++] = str[i];

}

 

// добавить символ конца строки

str2[j] = '\0';

strcpy(str, str2); // скопировать вспомогательный массив в исходный

Так же, как и в предшествующем примере, вводится вспомогательный массив. В исходном массиве происходит проверка на последовательность символов ‘…’

if ((str[i]=='.')&&(str[i+1]=='.')&&(str[i+2]=='.'))

Если такая последовательность найдена, то к вспомогательному массиву добавляется ‘.’

str2[j++] = '.';

i+=2;

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

str2[j++] = str[i];

 

Задачи на определение позиции заданного символа. Примеры

Пример 1. Дана некоторая строка символов. В заданном тексте определить позицию первой точки ‘. ‘. Считать, что первый символ в строке имеет позицию 1.

// поиск первого вхождения символа в тексте

char str[50]; // заданный текст

int i;

int pos; // искомое значение - позиция

 

// ввод массива str

//...

 

pos = -1;

 

for (i=0; i<strlen(str); i++)

if (str[i]=='.')

{

pos = i+1; // запомнить позицию

break; // выход из цикла, дальнейшее выполнение цикла не имеет смысла

}

 

if (pos == -1)

label1->Text = "Символ отсутствует в тексте.";

else

label1->Text = pos.ToString();

Пример 2. Задана некоторая строка символов. Определить позицию последней точки ‘. ‘ в тексте.

// поиск последнего вхождения символа в тексте

char str[50]; // заданный текст

int i;

int pos; // искомое значение - позиция

 

// ввод массива str

//...

 

pos = -1;

 

for (i=strlen(str)-1; i>=0; i--) // просмотр строки от конца к началу

if (str[i]=='.')

{

pos = i+1; // запомнить позицию

break; // выход из цикла, дальнейшее выполнение цикла не имеет смысла

}

 

if (pos == -1)

label1->Text = "Символ отсутствует в тексте.";

else

label1->Text = pos.ToString();

 

Пример 1. Задана некоторая строка символов. Создать новую строку, которая образована из данной чтением от конца до начала.

// обращение строки

char str[50]; // заданная строка

char str2[50]; // результирующая строка

int i;

int d;

 

// ввод массива str

//...

 

d = strlen(str);

 

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

str2[d-i-1] = str[i];

 

// добавить символ конца строки

str2[d] = '\0';

Пример 2. Задано слово. Проверить, читается ли это слово слева направо и наоборот.

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

char str[50]; // заданная строка

int i;

int d;

bool f_yes; // результирующая переменная

 

// ввод массива str

//...

 

d = strlen(str);

f_yes = true;

for (i=0; i<d/2; i++) // просмотр строки от конца до начала

if (str[i]!= str[d-i-1])

f_yes = false;

 

if (f_yes)

label1->Text = "Строка читается слева направо и наоборот";

else

label1->Text = "Строка не читается слева направо и наоборот";

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

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

char str1[50]; // строка 1

char str2[50]; // строка 2

int i;

int d1, d2;

bool f_yes; // результирующая переменная

 

// ввод массивов str1, str2

//...

 

d1 = strlen(str1);

d2 = strlen(str2);

 

f_yes = true;

 

if (d1 == d2) // проверка длин строк на совпадение

{

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

if (str1[i]!= str2[d1-i-1])

f_yes = false;

}

else

f_yes = false;

 

if (f_yes)

label1->Text = "Слова есть обратными между собой";

else

label1->Text = "Слова не являются обратными между собой";

 



Поделиться:




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

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


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