В заданном массиве строк найти все слова, содержащие заданное сочетание символов - C (СИ) (75957)
Формулировка задачи:
в заданном массиве строк найти все слова,содержащие заданное сочетание символов,и вывести их на монитор. Исходный массив строк ввести с помощью инициализации.Максимальное количество символов в строке- 80.Количество строк-5.На экран монитора вывести исходный массив и результат расчета.При обращении к элементу массива нельзя использовать дополнительную переменную для вычисления его адреса.
#include <stdio.h>
#include <string.h>
#include<stdlib.h>
int main ()
{
char str[] ="kjgkg kgjgk jhk ghg";
char * pch,t='jg';
printf ("slowa %s\n",str);
pch = strtok (str," ,.-");
while (pch != NULL)
{
printf ("%s\n",pch);
pch = strtok (NULL, " ,.-");
}
if (*pch=t) printf ("%s" ,pch);
system ("pause");
return 0;
}Решение задачи: «В заданном массиве строк найти все слова, содержащие заданное сочетание символов»
textual
Листинг программы
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
char str[] = "kjgkg kgjgk jhk ghg";
char substr[] = "jg";
char* pch;
char* pstr;
char* psubstr;
char* cur;
printf("words: %s\n", str);
pch = strtok(str, " ,.-");
while (pch != NULL)
{
for (pstr = pch, psubstr = substr; *pstr && *psubstr; ++pstr)
{
for (cur = pstr, psubstr = substr;
*cur && *psubstr && (*cur == *psubstr);
++cur, ++psubstr) { ; }
}
if (*psubstr == 0)
{
printf("%s\n", pch);
}
pch = strtok(NULL, " ,.-");
}
system("pause");
return 0;
}
Объяснение кода листинга программы
В этом коде на языке C выполняется следующая задача:
В заданном массиве строк (в данном случае это строка kjgkg kgjgk jhk ghg) необходимо найти все слова, содержащие заданное сочетание символов (в данном случае это jg).
Алгоритм решения задачи следующий:
- Задаются исходная строка (str) и подстрока (substr), которую необходимо найти в словах исходной строки.
- Строка разбивается на слова с помощью функции strtok. Для разделения используются пробелы, точки и тире.
- Для каждого найденного слова выполняется проверка на наличие подстроки.
- Если подстрока найдена в слове, то слово выводится на экран. Код работает следующим образом:
- Создается указатель pch, который будет указывать на текущее слово в исходной строке.
- Функция strtok используется для разбиения исходной строки на слова. В качестве разделителей используются пробелы, точки и тире.
- Пока не будет достигнуто последнее слово в исходной строке (pch не станет равным NULL), выполняется следующая операция: a. Создается указатель pstr, который будет указывать на текущее слово в исходной строке. b. Создается указатель psubstr, который будет указывать на текущую подстроку в слове. c. Пока текущее слово не закончится (pstr не станет равным NULL), выполняется следующая операция: — Пока текущая подстрока не закончится (psubstr не станет равным NULL), выполняется следующая операция: — Пока текущий символ в слове и текущий символ в подстроке совпадают (то есть пока pstr && psubstr), выполняется следующая операция: — Указатели pstr и psubstr перемещаются на следующий символ. — Если текущий символ в подстроке равен 0 (psubstr == NULL), то текущее слово содержит подстроку, и его можно вывести на экран. — Если текущая подстрока закончилась (psubstr == NULL), то текущее слово больше не содержит подстроку, и его можно пропустить. — Если текущее слово закончилось (pstr == NULL), то можно переходить к следующему слову.
- После того, как все слова будут проверены, программа выводит на экран найденные слова. Таким образом, данный код выводит на экран все слова в исходной строке, которые содержат заданную подстроку.