1

Тема: роботи з рядками в С

а) підраховує кількість слів у тексті, які починаються з голосної літери; б) виводить на екран
всі слова, що мають непарну кількість приголосних літер.
Вот мій код но чомусь він не працює

#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
 
int main ()
{
    char str[200], glas[] = {'а', 'о', 'и', 'е', 'ю', 'я', 'у', 'є'};
    char soglas[] = {'й', 'ц', 'к', 'н', 'г', 'ш', 'щ', 'з', 'х', 'ъ', 'ф', 'в', 'п', 'р', 'л', 'д', 'ж', 'ч', 'с', 'м', 'т', 'ь', 'б'};
    int  i, j, a, k, k2, l;
        
    system("chcp 1251 > nul");
    
    gets(str);
    
    for (i=0; i<strlen(str); i++)
    {
        for (j=0; j<9; j++)
        {
            if (str[i] == glas[j] && (ispunct(str[i-1]) || isspace(str[i-1]) || i == 0))
            {
                k++;
                for (; !ispunct(str[i]) && !isspace(str[i]) && str[i]!='\n'; i++)
                {
                    printf("%c", str[i]);
                }
                printf(" ");
                break;
            }
                
        }
    }
    printf("\nСлова, які починаються з великої букви - %d шт\n\n", k);
    
    for (i=1; i<strlen(str); i++)
    {
        if ((str[i] > 'а' && str[i] < 'я') && (ispunct(str[i-1]) || isspace(str[i-1]) || i == 0)) 
            l = i;
                
        for (; !ispunct(str[i]) && !isspace(str[i]) && str[i]!='\n'; i++) 
        {
            
            for (j=0; j<23; j++)
            
                if (str[i] == soglas[j])
                {
                    k2++;
                    break;
                }
        }
        if (k2 % 2 != 0)
        {
            for (; !ispunct(str[l]) && !isspace(str[l]) && str[l]!='\n'; l++) 
            {
                printf("%c", str[l]);
            }
            printf(" ");
        }
        k2 = 0;    
                    
    }
        
}
Подякували: olmovc1

2

Re: роботи з рядками в С

gets(str);
Виведіть за межі головної функції як окрему. В головній робіть лише звернення коли потрібно.

3

Re: роботи з рядками в С

Будь ласка, замість "не працює" напишіть конкретно, чого ви очікуєте і що саме відбувається.

kitsuligor1 написав:
printf("\nСлова, які починаються з великої букви - %d шт\n\n", k);

Не бачу такого у завданні.

4

Re: роботи з рядками в С

Має вивести слова які починаються з великої букви або їх кількість і має виводити на екран всі слова що мають непарну кількість приголосних літр.А коли я запускаю код то він не працює

5 Востаннє редагувалося koala (20.11.2022 09:13:19)

Re: роботи з рядками в С

Вибачте, але спершу було

kitsuligor223 написав:

а) підраховує кількість слів у тексті, які починаються з голосної літери;

а потім стало

kitsuligor223 написав:

вивести слова які починаються з великої букви або їх кількість

причому я не розумію, що тут може означати "або". Це треба виконати одне завдання з двох на власний розсуд? Чи програма має навмання виводити то слова, то їхню кількість? Неможливо написати програму, яка робить невідомо що. Визначіться уже із завданням.

kitsuligor223 написав:

коли я запускаю код то він не працює

Конкретно. Я ж прошу конкретно. Кнопка запуску в IDE сіра і не натискається? Компілятор повідомляє про помилки? Які саме? Виникає на долю секунди вікно і одразу зникає? Код запускається, але робить не те, чого ви очікуєте? А що саме ви вводите і що він виводить? Бачите, варіантів "не працює" дуже багато, і далеко не всі проблеми можна вирішити редагуванням коду. Напишіть КОНКРЕТНО, що саме відбувається, коли ви запускаєте код.

6

Re: роботи з рядками в С

справді потрібно настроїти вивід/ввід
на цьому форумі про це вже написано

7

Re: роботи з рядками в С

Вот така помилка можливо це ізатого щьо я програмую в replit ./main.c:7:42: error: character too large for enclosing character literal char str[200], glas[] = { 'a', 'o', И

'e', '1', 'Я', 'y', 'e'};

8

Re: роботи з рядками в С

а)має виводити  кількість слів які починаються з великої букви або самі слова які починаються з великої літери на власний розсуд.б) виводить на екран
всі слова, що мають непарну кількість приголосних літер.

9 Востаннє редагувалося koala (20.11.2022 15:19:04)

Re: роботи з рядками в С

О, тепер ясно.
судячи з

system("chcp 1251 > nul");

ви намагаєтеся працювати з кирилицею у кодуванні Win-1251. Але файл ви зберігаєте в юнікоді (UTF-8), де кириличні символи займають по 2 байти і, відповідно, не влізають у тип char. Якщо хочете працювати з кирилицею, вам треба конвертувати файл у Win-1251. Яким IDE користуєтеся?
Хоча в цілому я б радив вам перейти на латинські символи і забити поки що. Кодування кирилиці - окрема складна тема.

Подякували: leofun011

10

Re: роботи з рядками в С

Типу потрібно замінити  всі букви на латинські?

11

Re: роботи з рядками в С

    char str[200], glas[] = {'а', 'о', 'и', 'е', 'ю', 'я', 'у', 'є'};
    char soglas[] = {'й', 'ц', 'к', 'н', 'г', 'ш', 'щ', 'з', 'х', 'ъ', 'ф', 'в', 'п', 'р', 'л', 'д', 'ж', 'ч', 'с', 'м', 'т', 'ь', 'б'};

Тут прекрасно все, навіть як на першокласника. Це той випадок, коли буквар не засвоїв, але доводится навчатися в виші, гггг.

12

Re: роботи з рядками в С

kitsuligor223 написав:

Типу потрібно замінити  всі букви на латинські?

Це найпростіше рішення для початківця. Вам треба спершу з основами розібратися.

13

Re: роботи з рядками в С

на цьому форумі вже обоговрювалася ця проблема https://replace.org.ua/topic/3626/
+setlocale
  SetConsoleCP(1251);
    SetConsoleOutputCP(1251);