Программирование функции. Взаимосвязь формальных и фактических параметров. - C (СИ)

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

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

Доброго времени суток!

Задание:

Разработать функцию, которая заменяет в заданном предложении все малые украинские и латинские буквы на соответствующие заглавные буквы и возвращает количество слов в этом предложении. Используя разработанную функцию, напечатать все введенные предложения заглавными буквами. В конце указать, какое предложение состоит из наибольшего количества слов. Подсказка: в функции воспользоваться массивами больших и малых букв украинского алфавита.

Помогите пожалуйста набросать код. Чистый язык Си.
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MXS 10

char* parr[MXS];
 
 int main(void)
 {
     char buf[255], *pmem;
     int nstr;
     nstr=0;
     puts("\n\tText:");
     while (*gets(buf) && nstr<MXS-1) {
         pmem = (char*)malloc(strlen(buf)+1);
         if (pmem==NULL) {
             puts("no free memory");
             break;
         }
         strcpy(pmem, buf);
         parr[nstr++]=pmem;
     }

     return 0;
 }

Решение задачи: «Программирование функции. Взаимосвязь формальных и фактических параметров.»

textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
#define MAX_SENTENCES_COUNT 10
 
unsigned int SentenceToUpperCase(char *);
int FirstPos(const char, const char *);
 
int main(void)
{
    unsigned int actualSize = 0, maxSentenceNumber;
    int i, words, maxWordCount = -1;
    size_t n;
    char * sentences[MAX_SENTENCES_COUNT] = { NULL };
    char str[255];
 
    do {
        printf("Enter new sentence (empty sentence to exit): ");
        gets(str);
        n = strlen(str);
        if (n == 0) {
            break;
        }
        sentences[actualSize] = (char *)malloc(n + 1);
        if (sentences[actualSize] != NULL) {
            strcpy(sentences[actualSize], str);
 
            words = SentenceToUpperCase(sentences[actualSize]);
            if (words > maxWordCount) {
                maxSentenceNumber = actualSize;
                maxWordCount = words;
            }
 
            ++actualSize;
        }
    } while(actualSize < MAX_SENTENCES_COUNT);
 
    printf("\nProcessed sentences:\n");
    for (i = 0; i < actualSize; i++) {
        printf("%u: %s\n", i + 1, sentences[i]);
        free(sentences[i]);
    }
    printf("\nSentence with #%u has %d words.\n", maxSentenceNumber + 1, maxWordCount);
 
    return 0;
}
 
unsigned int SentenceToUpperCase(char * str)
{
    static const char * lowerCase = "abcdefghijklmnopqrstuvwxyzабвгґдеєжзиіїйклмнопрстуфхцчшщьюя";
    static const char * upperCase = "ABCDEFGHIJKLMNOPQRSTUVWXYZАБВГҐДЕЄЖЗИІЇЙКЛМНОПРСТУФХЦЧШЩЬЮЯ";
    static const char * wordSeparators = " .,;-\'\"!?\t\n\r\v";
 
    unsigned int i, wordsCount = 0, inWord = 0;
 
    for (i = 0; str[i] != '\0'; i++) {
        int pos = FirstPos(str[i], lowerCase);
        if (pos != -1) {
            str[i] = upperCase[pos];
        }
        if (FirstPos(str[i], wordSeparators) != -1) {
            inWord = 0;
        }
        else {
            if (inWord == 0) {
                ++wordsCount;
                inWord = 1;
            }
        }
    }
 
    return wordsCount;
}
 
int FirstPos(const char ch, const char * range)
{
    int i;
    for (i = 0; range[i] != '\0'; i++) {
        if (ch == range[i]) {
            return i;
        }
    }
 
    return -1;
}

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

  1. Программа считывает предложения с клавиатуры, пока не будет введено пустое предложение или не достигнет максимального количества предложений.
  2. Каждое предложение преобразуется в верхний регистр и разбивается на слова.
  3. Слова, которые не являются буквами, считаются разделителями слов.
  4. Функция FirstPos используется для определения позиции символа в строке.
  5. Если символ является буквой, он преобразуется в верхний регистр.
  6. Если символ является разделителем слов, счетчик слов инкрементируется.
  7. Если символ не является буквой или разделителем слов, счетчик слов сбрасывается.
  8. Если введенное предложение пустое, программа завершается.
  9. Каждое обработанное предложение выводится на экран.
  10. Первое предложение с наибольшим количеством слов выводится вместе с количеством слов.
  11. Каждое предложение освобождается после вывода.
  12. Программа завершается с возвратом значения 0.

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


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

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

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