Вставить самое короткое слово в начало самой короткой строки с помощью указателей - C (СИ)
Формулировка задачи:
Помогите,пожалуйста,решить задачу. Найти самое короткое слово и вставить его, если возможно, в начало самой короткой строки с помощью указателей. Исходный массив строк ввести с помощью инициализации.
Решение задачи: «Вставить самое короткое слово в начало самой короткой строки с помощью указателей»
textual
Листинг программы
#include <stdio.h> #include <stdlib.h> #include <string.h> #define N 3 #define M 100 // Найти самое короткое слово и вставить его, если возможно, в начало самой короткой строки с помощью указателей. char* func(char* , int*); int main() { char str[N][M] = {"You're basic,but hard define Simple yet somehow sublime Knew you would strike again.", "Things keep ending up this way come and get off Another notch has come to way", "In the thoughts of mass decay Funny how things end up this way"}; char* word, *fin; int minWord = M, minLine = M, x, y, q, len, i, j, *min; min = &minWord; q = minWord; for(i = 0; i < N; i++){ len = strlen(str[i]); if(len < minLine){ minLine = len; x = i; } word = func(str[i], min); if(minWord < q){ q = minWord; fin = word; y = i; } } minLine += q; if(minLine <= M){ str[x][minLine--] = '\0'; for(i = minLine, j = minLine - q; j >= 0; i--, j--) str[x][i] = str[x][j]; if(x == y) fin += q; for( ;i >= 0; i--) str[x][i] = *fin--; for(i = 0; i < N; i++) puts(str[i]); } else puts("Impossible. Not enough line length."); return 0; } char* func(char* arr, int* min) { char delim[] = " ,.?!();:\n\0", *p, *first, *last, *f; int flag = 0, sym = 1; for(p = arr; *p; p++, sym = 1){ for(int j = 0; delim[j]; j++) if(*p == delim[j]) sym = 0; if(sym){ if(!flag){ first = p; flag = 1; } if(*(p + 1) == '\0'){ last = p; if(last - first + 1 < *min){ *min = last - first + 1; f = last; } } } else{ if(flag){ last = p - 1; flag = 0; if(last - first + 1 < *min){ *min = last - first + 1; f = last; } } } } return f; }
Объяснение кода листинга программы
- Программа должна вставить самое короткое слово в начало самой короткой строки с помощью указателей.
- В функции
func
используется циклfor
, который проходит по каждому символу входной строки. - Переменная
sym
используется для отслеживания наличия разделителя в текущем слове. - Если в текущем слове нет разделителей, то оно считается самым коротким словом и сохраняется в переменной
f
. - Функция
func
возвращает самое короткое слово. - В функции
main
используются циклыfor
для нахождения самой короткой строки и самого короткого слова. - Переменная
min
используется для отслеживания длины самого короткого слова. - Если самая короткая строка имеет длину меньше
M
, то самое короткое слово вставляется в начало этой строки. - Если самая короткая строка имеет длину больше или равную
M
, то выводится сообщение об невозможности вставки слова. - В цикле
for
выводятся все строки после вставки самого короткого слова.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д