Строковые данные. Хелпаните пж
Задать строку.Найти длину самого короткого слова и заменить его сочетанием символов *. Смог сделать так чтоб находило минимальное слово. А заменить не выходит Понимаю, что надо как-то запомнить начало и конец слова. типо так: k = i; n = i - min; но как именно
#include "pch.h"
#include "math.h"
#include "conio.h"
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#include "locale.h"**
int main()
{
setlocale(LC_ALL, "Russian");
char string[] = "Заметался пожар голубой,позабылись родимые дали";
printf("Cтрока: %s", string);
int min = 100;
int length;
int counter = 0;
length = strlen(string);
printf("\nДлинна строки: %d \n", length);
for (int i = 0; i < length + 1; i++) {
if (string[i] != ' ' && string[i] != ',' && string[i] != '\0') {
counter++;
}
else {
if (counter < min) min = counter;
counter = 0;
}
}
printf("Минимальное слово %d \n", min);
}
Ответы (2 шт):
В момент определения min известна длина короткого слова, тут же нужно запомнить и позицию его конца.
if (counter < min) {
min = counter;
imin = i;
}
После прохождения строки скопировать кусок длиной imin-min, потом звёздочку, потом остаток строки
Я попробовал написать решение вашей задачи, немного дополнив и переписав ваш код. Необходимо находя самое короткое слово каждый раз запоминать позицию его начала вместе с размером, а потом посимвольно заменить
#include "stdio.h"
#include "string.h"
#include "locale.h"
int main()
{
setlocale(LC_ALL, "Russian");
char string[] = "Заметался пожар голубой,позабылись родимые дали\0";
int length = strlen(string);
int counter = 0;
int mincounter = 100, minposition = -1;
printf("Cтрока: %s\n", string);
printf("Длинна строки: %d \n", length);
int i = 0;
for (; i < length + 1; i++)
{
if (string[i] != ' ' && string[i] != ',' && string[i] != '\0')
{
counter++;
}
else
{
if (counter < mincounter)
{
mincounter = counter;
minposition = i - counter;
}
counter = 0;
}
}
for(i = 0; i < mincounter; ++i)
{
string[minposition + i] = '*';
}
printf("Минимальное слово %d\n", mincounter);
printf("Результат: >>%s<<\n", string);
return 0;
}