Страница 2 из 2

Re: Самое длинное слово, как минимум из трёх символов

Добавлено: 03 янв 2015, 22:08
vbn
упс :) и вправду, сам не заметил, да нужно чтоб был не менее трех букв а.
Я так понимаю надо условие написать, чтоб он отслеживал три буквы а, но только куда его вставить нужно?

Re: Самое длинное слово, как минимум из трёх символов

Добавлено: 03 янв 2015, 22:19
Romeo
Ну во-первых, эти буквы a нужно считать, причём считать отдельно в каждом слове.

Следует завести отдельную переменную, скажем count_a. Изначально она должна быть нолём. Во время прохождения по строке нужно увеличивать эту переменную, если текущий символ равен a и сбрасывать её в ноль, когда слово закончилось (в том же месте, где сбрасывается в ноль текущая длина). Ну и последнее, что нужно поправить, это условие запоминания индекса начала максимального слова. В этом условии нужно проверять не то, что текущая длина слова больше либо равно трём, а то, что наша переменная count_a больше либо равно трём.

Подумай над каждым изменением в коде и проблем не возникнет.

Re: Самое длинное слово, как минимум из трёх символов

Добавлено: 03 янв 2015, 23:33
vbn
Вроде я все сделал по вашим рекомендациям правильно, но не работает, ввожу два слово, одно с тремя буквами а а другое очень длинное, но не с буквами а выводиться а самое длинное

Код: Выделить всё

#include<stdio.h>
#include<string.h>
#include<conio.h>

int main()
{
    char s[255];
    int i, cur_len = 0, max_len = 0, start_max = -1,len,count_a=0;
    printf("Vvedite text: ");
    gets(s);
    len = strlen(s);
    for (i = 0; i <= len; i++)
    {
        if ((s[i]=='a') || (s[i]=='A'))
        {
            count_a++;
        }

        if ((s[i]==0) || (s[i]==' '))
        {
            if (count_a>=3)
            {
                start_max = i - cur_len;
                max_len = cur_len;
            }
            cur_len = 0;
            count_a=0;
        }
        else
        {
            cur_len++;
        }
    }

    if (start_max >= 0)
    {
        i = start_max;
        while ((s[i] != ' ') && (s[i] != 0))
        {
            printf("%c", s[i]);
            i++;
        }
    }
    else
    {
        printf("slovo s tremy simvolami a, ne bilo naydeno");
    }

    getch();

    return 0;
}

Re: Самое длинное слово, как минимум из трёх символов

Добавлено: 03 янв 2015, 23:57
Romeo
А зачем вторую часть условия убрал? Без неё у тебя самое длинное слово не будет искаться. Ну я же попросил тебя подумать над каждым изменением...

Re: Самое длинное слово, содержащее минимум 3 буквы 'a'

Добавлено: 05 янв 2015, 19:45
vbn
Я проверил прошлый код(который без добавления с содержанием буквы а ), он тоже не работает, я ввожу так:
sssg juytretip
и выводиться juytretip

Код: Выделить всё

#include <stdio.h>
#include <string.h>
#include <conio.h>

int main()
{
    char s[255];
    int i, cur_len = 0, max_len = 0, start_max = -1;

    printf("Vvedite text: ");
    gets(s);

    const int len = strlen(s);
    for (i = 0; i <= len; ++i)
    {
        if ((s[i]==0) || (s[i]==' '))
        {
            if ((cur_len >= 3) && (cur_len > max_len))
            {
                start_max = i - cur_len;
                max_len = cur_len;
            }
            cur_len = 0;
        }
        else
        {
            cur_len++;
        }
    }
   
    if (start_max >= 0)
    {
        i = start_max;
        while ((s[i] != ' ') && (s[i] != 0))
        {
            printf("%c", s[i]);
            ++i;
        }
    }
    else
    {
        printf("slovo dlinnoy ot trex simvolov i boliche, ne bilo naydeno");
    }

    getch();

    return 0;
}

Re: Самое длинное слово, содержащее минимум 3 буквы 'a'

Добавлено: 05 янв 2015, 20:31
Romeo
А что ты ожидаешь увидеть? Ведь "juytretip" - это ведь и есть самое длинное слово, содержащее как минимум три буквы.

Re: Самое длинное слово, содержащее минимум 3 буквы 'a'

Добавлено: 05 янв 2015, 20:51
vbn
Хорошо, вернемся к задаче с тремя буквами а, где я мог ошибиться, вроде проверяет и длину слова, и буквы "а" считает, но вывод длинное слово, без букв "а"

Код: Выделить всё

#include<stdio.h>
#include<string.h>
#include<conio.h>

int main()
{
    char s[255];
    int i, cur_len = 0, max_len = 0, start_max = -1,len,count_a=0;
    printf("Vvedite text: ");
    gets(s);
    len = strlen(s);
    for (i = 0; i <= len; i++)
    {
        if ((s[i]=='a') || (s[i]=='A'))
        {
            count_a++;
        }

        if ((s[i]==0) || (s[i]==' '))
        {
            if ((count_a>=3) && (count_a > max_len))
            {
                start_max = i - cur_len;
                max_len = cur_len;
            }
            cur_len = 0;
            count_a=0;
        }
        else
        {
            cur_len++;
        }
    }

    if (start_max >= 0)
    {
        i = start_max;
        while ((s[i] != ' ') && (s[i] != 0))
        {
            printf("%c", s[i]);
            i++;
        }
    }
    else
    {
        printf("slovo s tremy simvolami a, ne bilo naydeno");
    }

    getch();

    return 0;
}

Re: Самое длинное слово, содержащее минимум 3 буквы 'a'

Добавлено: 06 янв 2015, 12:19
Romeo
Скопировал программу из твоего сообщения, скомпилировал и запустил. Вот результат запуска:
Vvedite text: 11111 aaa 1111a a11111111a 111111111111111111111
aaa
По-моему всё правильно. Ты видишь ошибки?

Re: Самое длинное слово, содержащее минимум 3 буквы 'a'

Добавлено: 06 янв 2015, 19:16
vbn
Хехе,создал новый файл, вставил код, все работает, спасибо, но а в старом, тоже самое, код такой же, но видимо не перекомпилируется