Строка: Найти, сколько раз в ней встречается заданное сочетание символов - C (СИ)
Формулировка задачи:
Здравствуйте. Объясните как решить задачу.
Дана строка длиной n. Найти, сколько раз в ней встречается заданное сочетание символов.
1. может ли пользователь вручную задать длину строки. Если да, то как?
2. как составляется условие поиска в строке нескольких символов и как вывести количество повторов на экран?
3. как найти строку, содержащую наибольшее количество слов, и удалить из этой строки самое длинное слово?
Решение задачи: «Строка: Найти, сколько раз в ней встречается заданное сочетание символов»
textual
Листинг программы
#include <stdio.h>
#include <string.h>
int main ()
{
const int N = 5, M = 80;
char strings [N][M], *ptr, *words [25], buf [80];
int num_word, max_len = 1, max_index = 0, i = 0;
printf ("Input:\n");
for (int max = 1; i < N; i ++)
{
gets (strings [i]);
char *start = strings [i];
int count = 1;
while (1)
{
ptr = strchr (start, ' ');
if (!ptr)
break;
count ++;
start = ptr + 1;
}
if (count > max)
{
max = count;
max_index = i;
}
}
i = -1;
ptr = strtok (strings [max_index], " ");
while (ptr)
{
words [++ i] = ptr;
int length = strlen (words [i]);
if (length > max_len)
{
max_len = length;
num_word = i;
}
ptr = strtok (NULL, " ");
}
for (int j = 0; j <= i; j ++)
{
if (j == num_word)
continue;
strcat (buf, words [j]);
strcat (buf, " ");
}
strings [max_index][0] = '\0';
strcpy (strings [max_index], buf);
printf ("\nOutput:\n");
for (i = 0; i < N; i ++)
puts (strings [i]);
return 0;
}
Объяснение кода листинга программы
- Включаются необходимые заголовочные файлы
- Объявляются и инициализируются переменные:
const int N = 5- количество строкconst int M = 80- максимальная длина строкиchar strings [N][M]- массив строкchar *ptr- указатель на текущий символchar *words [25]- массив указателей на словаint num_word- номер слова, которое повторяется максимальное количество разint max_len- максимальная длина словаint max_index- индекс строки, содержащей слово, которое повторяется максимальное количество разint i- счётчик, используемый в цикле
- Выводится приглашение для ввода строк
- Циклом считываются строки
- Для каждого слова в строке подсчитывается количество повторений
- Если текущее слово длиннее максимального, то обновляется максимальная длина и номер строки, содержащей слово
- Если текущее слово - то, которое повторяется максимальное количество раз, то его копируют в буфер
- После ввода всех строк выводится результат
- В цикле выводятся все строки