1

Тема: Рядки вводу

Доброго дня! Звертаюся до вас по допомогу. Написала код програми,але,як виявилося,неправильний. Ніяк не можу знайти помилку.Тому хто може, допоможіть,будь ласка.

//вивести найдовше слово рядка
#include<stdio.h>
#include<conio.h>
#define N 100
    int main()
    {
        char bukva[N];
        int num = 0, max = 0, i = 0, poch, kin,n=0,j;
        printf("Enter string:\n");
        for (i = 0; (bukva[i] = getchar()) != '\n'; i++)
            if (i + 1 >= N)
                break;
        bukva[i] = '\0';
        printf("%s\n", bukva);
        for (i = 0; bukva[i] != '\0'; i++)
        {
            if (((bukva[i] > 64) && (bukva[i] < 91)) || ((bukva[i] > 98) && (bukva[i] < 123)))
            {
                num++;
            }
            else if (num > max)
            {
                max = num;
                kin = i;
                poch = i - max;
                num = 0;

            }
        }
        if (num > max)
        {
            max = num;
            kin = i;
            poch = i - max;
        }
        for (j = poch; j < kin; j++)
            printf("%c", bukva[j]);
    _getch();
    return 0;
}

2

Re: Рядки вводу

Помилка в програмі - це невідповідність коду завданню. Ви вже бачите, в чому у нас буде проблема? Ми не знаємо, що ця програма має робити. Немає завдання.
Крім того, напишіть, як саме ви "виявили", що код неправильний. Що саме, на вашу думку, не відповідає в умові роботі коду.
Без цього ми вам допомогти не зможемо. Ну, хіба що телепати.

3

Re: Рядки вводу

koala написав:

Помилка в програмі - це невідповідність коду завданню. Ви вже бачите, в чому у нас буде проблема? Ми не знаємо, що ця програма має робити. Немає завдання.
Крім того, напишіть, як саме ви "виявили", що код неправильний. Що саме, на вашу думку, не відповідає в умові роботі коду.
Без цього ми вам допомогти не зможемо. Ну, хіба що телепати.

Мейбі перший коментар в коді і є завданням.

x

4

Re: Рядки вводу

Chemist-i написав:
koala написав:

Помилка в програмі - це невідповідність коду завданню. Ви вже бачите, в чому у нас буде проблема? Ми не знаємо, що ця програма має робити. Немає завдання.
Крім того, напишіть, як саме ви "виявили", що код неправильний. Що саме, на вашу думку, не відповідає в умові роботі коду.
Без цього ми вам допомогти не зможемо. Ну, хіба що телепати.

Мейбі перший коментар в коді і є завданням.

Енд мейбі нот. Наразі проблема в тому, що дещо в цьому коді не відповідає завданню. Відповідно, брати будь-що з коду (навіть коментар) і розглядати його, як правильне - некоректно, оскільки щось там неправильно. Зокрема, можливо, що й цей коментар - новачки часто не звертають уваги на коментарі і лишають старі, скажімо, зі старої програми.

5

Re: Рядки вводу

stasivdiana показую як вирішити ось це

//вивести найдовше слово рядка

я побачив що ви теж це хотіли проте не обнулення довжини не зміни ітераторів, особливо не сподобавлось ось це

if (((bukva[ i] > 64) && (bukva[ i] < 91)) || ((bukva[ i] > 98) && (bukva[ i] < 123)))

- слова це те що знаходиться між деліметрами тобто пробілами табуляторами, розділовими знаками, а ви що робите?
Коротше кажучи подивіться певен зрозумієте де помились

#include <stdio.h>

int main(){
    size_t i, j, bgn, end;
    const char text[] = "This is  sample text  for  find   max  length";
    for( i = j = bgn = end = 0; text[i]; i++ )
    {
        if
        ( 
            text[i] == ' ' || text[i] == '\t' || text[i] == '\n' || text[i] == '\r'   /*isspace*/
            ||
            text[i] == '.' || text[i] == ','  || text[i] == '?'  || text[i] == '!'    /*ispunkt*/
        )
        {
            //зустріли деліметр
            if( i - j > end - bgn )
            {
                bgn = j;
                end = i;
            }
            j = i + 1;
        }
    }
    printf("maxword : \n");
    for( i = bgn; i <= end; i++ )
        printf("%c", text[i]);
    return 0;
}

http://codepad.org/VNdg2sn4

maxword :
sample

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

6

Re: Рядки вводу

Також якщо ви підключите хедер ctype.h то замість цих рядкив можите записати ось ті функції що йдуть праворуч

text[ i] == ' ' || text[ i] == '\t' || text[ i] == '\n' || text[ i] == '\r'   /*isspace*/
            ||
            text[ i] == '.' || text[ i] == ','  || text[ i] == '?'  || text[ i] == '!'    /*ispunkt*/

, тобто

if
( 
     isspace(text[i]) 
     ||
     ispunkt(text[i]) 
)

на цим все

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

7 Востаннє редагувалося -=ЮрА=- (30.10.2016 10:56:17)

Re: Рядки вводу

Окремо звернусь до модератора, перепишить свій лексичний аналізатор з урахуванням того що він "матюгається"
на [ i] у блоку тексту, тобто коли у цитаті/тексту є щось таке text[ i] ваш аналізатор сприймає це як відкривання тегу i, тому доводиться вставляти пробіл. Це чесно дошкуляє при відповідях

Post's attachments

tag_i_1.png 5.76 kb, 33 downloads since 2016-10-30 

8

Re: Рядки вводу

-=ЮрА=- написав:

слова це те що знаходиться між деліметрами

От тому я і не хочу відповідати, доки автор питання не уточнить завдання. Навіть якщо це і є завдання - то звідки ви взяли, що слова у нього визначені саме так? Як на мене, "43кг" - це три слова ("сорок три кілограми"), за вашим визначенням - одне довжиною 4 символи, а в автора, мабуть (точно сказати не можу), одне довжиною 2 символи.

9

Re: Рядки вводу

-=ЮрА=-,дуже Вам дякую. Ви мені справді допомогли.

10

Re: Рядки вводу

Також хочу вибачитися перед Вами,koala. На наступний раз писатиму окремо умову завдання,а не в коментарях. Також намагатимуся точніше описати умову.

11 Востаннє редагувалося -=ЮрА=- (30.10.2016 13:23:02)

Re: Рядки вводу

koala, бо слово це те що знаходиться між деліметрами, згідно граматики української мови скорочення одиниць маси, довжини, тощо повинні писатися ОКРЕМО від цифрового чи літерного позначення, тобто "43 кг - вірно, а ось "43кг" - 2-ка по граматиці не меньше.
PS:Гадаю що лексичний аналіз рядка значно виходить за межі завдання теми

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