Переписать фразу, изменив первые и последние буквы слов на заглавные - C (СИ)

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

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

Помогите пожалуйста составить программу. Которая переписывает фразу, меняя первые и последние буквы слов на заглавные.

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

textual
Листинг программы
#include <stdio.h>
#include <ctype.h>
 
int main() {
    char str[] = " You can also:click on; a link in! the move list, to go back? in time and. see what"
                  " the board looked    like just after that move was,,,!! made";
    char delim[] = " \t\n,.?!;:", *first, *last;
    int i, j, flag = 0, sym = 1;
    for(i = 0; str[i]; i++, sym = 1){
        for(j = 0; delim[j]; j++)
            if(str[i] == delim[j])
                sym = 0;
        if(sym){
            if(!flag){
                first = &str[i];
                flag = 1;
            }
        }
        if(!sym || str[i + 1] == '\0'){
            if(flag){
                last = &str[i - 1];
                if(str[i + 1] == '\0')
                    last = &str[i];
                flag = 0;
                *first = toupper(*first);
                *last = toupper(*last);
            }
        }
 
    }
    puts(str);
    return 0;
}

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

  1. В начале программы подключаются две библиотеки: stdio.h и ctype.h. Библиотека stdio.h используется для ввода-вывода данных, а ctype.h содержит функции для работы со строками.
  2. Затем определена переменная str, которая содержит исходную строку. Исходная строка заключена в кавычки.
  3. Далее определена переменная delim, которая содержит разделители: пробел, табуляция, перевод строки, точка, вопросительный знак, восклицательный знак; двоеточие, точка с запятой и двоеточие.
  4. Затем определены две переменные i и j, которые используются в двух вложенных циклах. Переменная flag используется для отслеживания первой и последней буквы, а переменная sym используется для отслеживания символа, следующего за текущим.
  5. Внешний цикл for перебирает символы исходной строки. Если текущий символ является разделителем, то внутренний цикл for проверяет, является ли следующий символ за ним разделителем. Если нет, то текущий символ считается началом слова, и внутренний цикл for завершается.
  6. Если внешний цикл for не находится в начале строки (то есть flag равно 1), то это означает, что мы нашли слово, и мы должны сохранить указатель на первый символ этого слова.
  7. Если внешний цикл for находится в начале строки (то есть flag равно 0), то мы должны найти конец слова. Если следующий символ является разделителем, то мы нашли конец слова, и мы должны сохранить указатель на последний символ этого слова.
  8. Если внешний цикл for находится в середине слова (то есть flag равно 1 и str[i + 1] не является разделителем), то мы должны найти конец слова. Если следующий символ является разделителем, то мы нашли конец слова, и мы должны сохранить указатель на последний символ этого слова.
  9. Если внешний цикл for находится в конце строки (то есть flag равно 0 и str[i + 1] равно '\0'), то мы нашли последнее слово, и мы должны сохранить указатель на последний символ этого слова.
  10. Если мы нашли слово, то мы изменяем первый и последний символ этого слова на заглавные буквы.
  11. В конце программы выводится измененная строка.
  12. Программа возвращает 0, что означает успешное выполнение.

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

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