Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.03.2016, 13:23   #1
ezu
 
Регистрация: 26.02.2016
Сообщений: 9
По умолчанию Обработка строк с++

Уже почти неделю бьюсь с прогой. И всё никак не выходит...

Нужно найти самое длинное общее слово из двух заданных предложений.
Где ошибка? или что исправить?

Вот код
Изображения
Тип файла: jpg 15лаба.jpg (32.9 Кб, 141 просмотров)
ezu вне форума Ответить с цитированием
Старый 17.03.2016, 16:58   #2
wordman
Пользователь
 
Регистрация: 15.03.2016
Сообщений: 13
По умолчанию

У Вас вводится одна строка, надо найти самое длинное слово в ней?
(Вы написали что в 2х предложениях)
Если всё же общее в предложениях, то всё по другому, как минимум надо ввести второе предложение. у Вас больше похоже на поиск самого длинного слова в строке.
В этом случае ошибка в том, что Вы сравниваете не по длинне а лексически.

Последний раз редактировалось wordman; 17.03.2016 в 17:05.
wordman вне форума Ответить с цитированием
Старый 17.03.2016, 18:03   #3
ezu
 
Регистрация: 26.02.2016
Сообщений: 9
По умолчанию

Цитата:
Сообщение от wordman Посмотреть сообщение
У Вас вводится одна строка, надо найти самое длинное слово в ней?
(Вы написали что в 2х предложениях)
Если всё же общее в предложениях, то всё по другому, как минимум надо ввести второе предложение. у Вас больше похоже на поиск самого длинного слова в строке.
В этом случае ошибка в том, что Вы сравниваете не по длинне а лексически.
Да....нужно в двух предложениях найти самое длинное общее слово, а я разобраться не могу,как это реализовать(( поплыл в своё время на массивах и всё(( я понимаю,что мне нужно все общие слова выделить в массив и пройтись по нему и в отдельную переменную закинуть самое длинное из них. Но я на словах только понимаю что мне нужно
ezu вне форума Ответить с цитированием
Старый 18.03.2016, 10:51   #4
wordman
Пользователь
 
Регистрация: 15.03.2016
Сообщений: 13
По умолчанию

Стало быть оба предложения вводятся в одной строке? Ок.
Значит надо:
1) разбить строку на два предложения по точке '.'
2) пробежаться по словам первого предложения ища их во втором
2,1) Выделяеш слово в первом предложении
2,2) Узнаеш его длинну
2,3) если длинна > длинны найденого ранее ищеш его во втором предложении если длинна < - отбрасываеш. Если нашел - меняеш запомненное слово.

Думаю у тебя должно получиться, код который ты выложил не безнадёжен. Если не получится завтра вечером(или в понедельник) напишу, мне на это час нужен будет, я C подзабыл.
wordman вне форума Ответить с цитированием
Старый 21.03.2016, 00:34   #5
Chainik!
Форумчанин
 
Регистрация: 10.11.2008
Сообщений: 120
По умолчанию

Есть вариант который выглядит следующим образом.
1.Найдём общие слова в обоих предложениях.
2.Затем сравним их по длине.
3.Выведем самое длинное слово на экран.
помог - жми на весы

Последний раз редактировалось Chainik!; 21.03.2016 в 01:08.
Chainik! вне форума Ответить с цитированием
Старый 22.03.2016, 09:28   #6
wordman
Пользователь
 
Регистрация: 15.03.2016
Сообщений: 13
По умолчанию

как то так:
Код:
#include <stdio.h>
#include <string.h>
int main()
{
    char ishod[100], predl1[100]="", predl2[100]="", slovo[100]="", big_slovo[100]="", slovo2[100]="", ch1, ch;
    int l_ishod, end1=0, end2=0, l_pred1=0, l_pred2=0, i, j, l_big=0, l_slovo=0, newslovo=1, slova_sovpali=0, i_slova=0, l_slovo2=0;
    puts("Vvedite predlogeniy!");
    gets(ishod);
    l_ishod=strlen(ishod);
//----------------------------------разбивка строки ввода на 2 предложения
    for (i=0;i<=l_ishod; i++)
    {
        if (ishod[i]=='.' || ishod[i]=='!' || ishod[i]=='?')
        {
            if (end1==0)
            {
                end1=i;
                predl1[i]=ishod[i];
                predl1[i+1]='\0';
            }
            else 
            {
                predl2[end2]=ishod[i];
                predl1[end2+1]='\0';
                end2=i+1;
                break;
            }
        }
        if (end1==0) predl1[i]=ishod[i];
        else if (ishod[i]!='.' && ishod[i]!='!' && ishod[i]!='?') predl2[end2++]=ishod[i];
    }
//--------------------------------------------------
    l_slovo=0;
    for (i=0; i<=end1; i++)
    {//прохожу первое предложение по всем словам
        ch=predl1[i];
        if (ch==' ' || ch==',' || ch=='.' || ch=='!' || ch=='?' || ch==':' || ch==';')
        {//------------------если слово закончилось
            slovo[l_slovo+1]='\0';
        //--------------------------------------------
            if (l_slovo>l_big)
            {//слово может оказаться самым большим
            //-----------ищу в predl2
                j=0;
                while (j<=end2-l_slovo && !slova_sovpali)
                {//ищу слова во 2м предложении
                    ch1=predl2[j++];
                    if (ch1==' ' || ch1==',' || ch1=='.' || ch1=='!' || ch1=='?' || ch1==':' || ch1==';' || ch1=='\0')
                    {//если конец слова
                        slovo2[l_slovo2]='\0';
                        if (strcmp(slovo, slovo2)==0)
                        {
                            slova_sovpali=1;
                            l_big=l_slovo;
                            strcpy(big_slovo, slovo);
                        }else{
                            l_slovo2=0;
                        }
                    }else{
                        slovo2[l_slovo2++]=ch1;
                    }
                }
            }
                
            l_slovo=0;
        }else
        {
            slovo[l_slovo++]=ch;
        }
    }
    puts("Big word:");
    puts(big_slovo);
 }
wordman вне форума Ответить с цитированием
Старый 23.03.2016, 19:10   #7
Chainik!
Форумчанин
 
Регистрация: 10.11.2008
Сообщений: 120
По умолчанию

wordman запустил вашу программу и ничего толкового она у вас не делает.
помог - жми на весы

Последний раз редактировалось Chainik!; 23.03.2016 в 19:22.
Chainik! вне форума Ответить с цитированием
Старый 24.03.2016, 11:40   #8
wordman
Пользователь
 
Регистрация: 15.03.2016
Сообщений: 13
По умолчанию

В чём запустили? (среда)
Какой пример использовали?
Была ли в нём кирилица, или другие нац.символы?
Программа сделана для работы с латиницей, что бы не заморачиваться с различными кодировками(я хз как C обрабатывает юникод)
Буду признателен если приведёте пример на котором моя программа ничего полезного не сделала. Исключать возможность ошибки в проге написанной на коленке - глупо.
wordman вне форума Ответить с цитированием
Старый 24.03.2016, 17:00   #9
Chainik!
Форумчанин
 
Регистрация: 10.11.2008
Сообщений: 120
По умолчанию

1.Запускал в среде разработки: Visual Studia 2005.
2.Пример который я вводил, выглядит следующим образом:
hello my dear freand. apple dear sun word.
На выходе ничего не получил.
помог - жми на весы
Chainik! вне форума Ответить с цитированием
Старый 24.03.2016, 18:15   #10
ezu
 
Регистрация: 26.02.2016
Сообщений: 9
По умолчанию

Спасииибо,но у меня почему то при вводе предложения ничего не выводит,а просто пишет "big word:" хотя запускается без ошибок
ezu вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обработка строк shadow155 Помощь студентам 1 10.09.2015 10:55
Три задачи на Delphi (Паскаль): обработка строк, обработка множеств, работа с типизированным файлом Тедеев Помощь студентам 11 13.12.2013 13:38
Обработка Строк katya_bush Паскаль, Turbo Pascal, PascalABC.NET 4 14.11.2011 21:50
Обработка строк в С++ МаркиЗа Фриланс 10 13.06.2010 17:35
Обработка строк Dmitriy1989100 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 02.11.2009 22:28