Распечатать введенные слова группами, каждая из которых должна состоять из слов, три первых буквы которых совпадают - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Задача: "Ввести последовательность не связанных слов. Распечатать введенные слова группами, каждая из которых должна состоять из слов, три первых буквы которых совпадают." Си начал учить недавно, очень мало опыта работы с символьными строками. То что пришло в голову:
int main(void)
{
int n, k,i=0,t=0;
scanf("%d",&n); //Количество слов
scanf("%d",&k); //Максимальное количество букв в слове.
char cat[n][k+1]; //Создания массива в который будут записываться слова
 
while(i<=n){        //Цикл ввода
    gets(cat[i]);
    i++;
}
char cat1[n][3];            //Здесь хотел создать массив в который входят первые три буквы каждого слова
for(int p=0;p\n%s",cat[0][0]);//Но почему то даже простой вывод первого элемента начального массива не работает...
 
for(int j=0;j<=n;j++){        //Но слова полностью выводит.
    printf("\n%s",cat[j]);
}
}
Подскажите пожалуйста идеи хотя бы... Пробовал еще через getchar() посимвольно заносить но там очень все запутано выходит.

Решение задачи: «Распечатать введенные слова группами, каждая из которых должна состоять из слов, три первых буквы которых совпадают»

textual
Листинг программы
#include <stdio.h>
#include <string.h>
#include <locale.h>
 
int main (void)
{
    setlocale(LC_ALL, "Rus");
    const int a = 32;       // максимальная длина слова
    int i, k, n;
 
    printf("Количество слов?: ");
    scanf("%d", &n);
    if (n < 1) return -1;
 
    char words[n][a];       // список слов
    char c[3];              // первые буквы слова
 
    printf("Введите слова:\n");
    for (i=0; i<n; i++) // i < n, а не <= n
        scanf("%32s", words[i]);    // ограничиваем длину слова 32 символами
 
    printf("Результат сортировки за первыми 3-мя буквами:\n");
    for (i=0; i<n; i++)
    {
        if (words[i][0] != 0)           // не просматриваем уже проверенные
        {
            strncpy(c, words[i], 3);    // запоминаем первые буквы слова
            for (k=i; k<n; k++)         // печатаем с i-го слова, а не с самого начала
            {
                if (! strncmp(c, words[k],3))       // if (strncmp(c, words[k],3) == 0)
                {
                    printf("%s\n", words[k]);
                    words[k][0] = 0;
                }
            }
            printf("\n");
        }
    }
    return 0;
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 3.4 из 5
Похожие ответы