Создать словарь, и подсчитать количество различных слов в строке - C (СИ)

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

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

Снова я обращаюсь к Вам за помощью. Мне нужно ввести строку, создать массив слов и подсчитать количество различных слов, например: aa bb aa cc программа должна сделать словарь aa bb cc и сохранить количество слов, например, я сделал массив счетчиков, в нем должны быть значения 2 1 1 собственно программа. Сразу скажу, что писать мне нужно на самом низком уровне, т.е. не использовать вообще никакие функции. это важно.
#include <stdio.h>
 
#define MAX 100
 
int getline(char s[], int lim)
{
    int i=0;
    char c;
    for (i=0; (i<(lim-1)) && ((c=getchar()) != EOF) && (c != '\n'); i++)
        s[i]=c;
    s[i++]='\0';
    return i;
}
 
void main(void)
{
    int strlen;
    int i=0;
    char s[MAX],w[MAX];
 
    printf("Enter word:\n");
    getline(w,MAX);
 
    printf("Enter string:\n");
    strlen=getline(s,MAX);
 
    char news[MAX][MAX];
 
    int ends=0;
    int begs=0;
    int flag=0;
    int begflag=0;
    int is_it_in_news=0;
 
    int row=0;
    int col=0;
    while(s[i] != ' ')
    {
    news[row][col] = s[i];
    col++;
    i++;
    }
    int strlen2=1;
    int arrflags[MAX];
 
    begs=0;
    for(i=0; i<(strlen-1); i++)
        {   if ((s[i-1] == ' ') && (begflag=0));
            {
            begflag=1;
            begs=i;
            while((s[i] >= 'a') && (s[i] <= 'z'))
                {
                ends=i;
                i++;
                }
            for (row=0; row<strlen2; row++)
                {
                    flag=0;
                    for (i=begs, col=0; i<=ends; col++, i++)
                        {
                        if (s[i] !=news[row][col]) {flag=1; }
                        }
                   if (flag==0)
                        {
                        is_it_in_news=1;
                        arrflags[row]++;
                        }
                }
             if (is_it_in_news==0)
                {
                    for(i=begs, col=0, row++; i<= ends ; i++, col++)
                    {
                        news[row][col] = s[i];
                    }
                    strlen2++;
                }
            }
        }
 
    for(i=0; i<=strlen2; i++)
    {
        printf("%s ", news[i]);
    }
 
}
Суть такова, что дебагером я пользоваться абсолютно не умею. Если Вам не трудно, скажите, где в коде ошибка (логика то по моему верна, хотя если нет, скажите) , и почему программа выводит только первое слово, т.е. по сути ничего туда не записывается, если не считать первого лобного цикла (не знаю, нужен ли он)... П.С. еще нужно будет слово, реже всего встречающееся, заменить на введенное (sic!) так что программа у меня не до конца написана... (хотя ошибки уже есть!)

Решение задачи: «Создать словарь, и подсчитать количество различных слов в строке»

textual
Листинг программы
int begflag=0; \\флаг о вхождении в цикл создания словаря
int begs=0; \\начало слова в троке

Объяснение кода листинга программы

  1. Инициализируются две переменные: begflag устанавливается в 0, а begs - в 0.
  2. Запускается цикл, который будет выполняться до тех пор, пока не встретится слово, начинающееся с заглавной буквы (то есть, пока не закончится предложение).
  3. Внутри цикла проверяется, является ли текущее слово словом из словаря (слова в словаре разделяются запятыми). Если слово найдено, то его номер в словаре сохраняется в переменную begs.
  4. Если слово не найдено, то оно добавляется в словарь (слова в словаре разделяются запятыми) и его номер сохраняется в переменную begs.
  5. После окончания цикла, значение переменной begs будет содержать номер последнего слова в строке.
  6. Код завершается.

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


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

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

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