В заданной строке найти подстроку, находящуюся между пробелами с заданными номерами - C (СИ)
Формулировка задачи:
В заданной строке найти подстроку, находящуюся между пробелами с заданными номерами. Рабочие строки не использовать. Предусмотреть случай, когда в строке таких пробелов нет.
Входные данные:
a*bc -&19 -l sb3> 4-5 z%x
номер начального пробела:2
номер конечного пробела:4
Выходные данные:
-l sb3>
Решение задачи: «В заданной строке найти подстроку, находящуюся между пробелами с заданными номерами»
textual
Листинг программы
#include <stdio.h>
#include <locale.h>
#define N 256
int main(void)
{
setlocale(LC_ALL,"RU");
int i,nach,kon,c,strt=0,en=0;
char st[N] = "a*bc -&19 -l sb3> 4-5 z%x";
printf("Введите начальный номер пробела:");
scanf("%d",&nach);
printf("Введите конечный номер пробела:");
scanf("%d",&kon);
c=0;
for(i=0;st[i]!='\0';i++)
{
if(st[i]==' ')
{
c++;
if(c==nach)break;
}
}
if(st[i]=='\0')
{
printf("В строке пробелов нет!\n");
return(0);
}
else
{
strt=i+1;
for(i=strt;st[i]!='\0';i++)
{
if(st[i]==' ')
{
c++;
if(c==kon)break;
}
}
if(st[i]=='\0')
{
printf("В строке нет %d-ого пробела!\n", kon);
return(0);
}
else
en=i;
}
printf("Найденная подстрока: \n");
for(i=strt;i<en;i++)printf("%c",st[i]);
printf("\n");
return (0);
}
Объяснение кода листинга программы
- Подключение необходимых библиотек для работы с локалью и вводом-выводом
- Установка начальной локали на русский язык
- Объявление переменных:
- i - счётчик для прохождения по строке
- nach - номер начального пробела в строке
- kon - номер конечного пробела в строке
- c - счётчик количества пройденных пробелов
- strt - индекс первого найденного пробела
- en - индекс последнего найденного пробела
- st[N] - строка, в которой нужно найти подстроку
- Вывод сообщения и запрос начальной позиции пробела у пользователя
- Считывание значения переменной nach с помощью функции scanf
- Вывод сообщения и запрос конечной позиции пробела у пользователя
- Считывание значения переменной kon с помощью функции scanf
- Установка начального значения счётчика пробелов в 0
- Цикл, который проходит по каждому символу строки до тех пор, пока не встретит символ конца строки
- Если текущий символ является пробелом, то увеличивается счётчик пробелов
- Если количество пробелов равно начальному номеру, то цикл прерывается
- Если после прохода по всей строке не было найдено ни одного пробела с заданным номером, то выводится сообщение об отсутствии такого пробела
- Если были найдены пробелы с заданными номерами, то:
- Устанавливается значение переменной strt равным индексу следующего пробела
- Цикл, который проходит по каждому символу от найденного до следующего пробела или до конца строки, если следующего пробела нет
- Если текущий символ является пробелом, то увеличивается счётчик пробелов
- Если количество пробелов равно конечному номеру, то цикл прерывается
- Если после прохода по подстроке не было найдено ни одного пробела с заданным номером, то выводится сообщение об отсутствии такого пробела
- Выводится найденная подстрока
- Возвращается 0, что означает успешный конец работы программы