Ru-MaNGOS

Вернуться   Ru-MaNGOS > Документация > Языки программирования

Важная информация

Языки программирования Изучаем С++, Sql, php, Lua, Python

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
Старый 26.05.2010, 20:41   #1
Hantet
Ученый
 
Аватар для Hantet
 
Регистрация: 07.03.2010
Адрес: Санкт-Петербург
Сообщений: 163
Сказал(а) спасибо: 124
Поблагодарили 111 раз(а) в 52 сообщениях
Hantet Скоро придёт к известностиHantet Скоро придёт к известности
Отправить сообщение для Hantet с помощью ICQ
Сообщение Программа

Задали по программированию задачку, с виду ну очень простая, но никак не подойти к ней правильно



Я сразу попробовал так:


Компилятор ругается:

к тому же, если в тексте сделать пробел, то в переменную запишется только текст до пробела.

Буду очень благодарен за помощь, программу кровь из носа надо написать
__________________
Галя: Вот почему когда я пуск делаю и по ярлыку две то запускается, а если вот мне к примеру надо не из пуска её то ничего и в красном показывает, а надо ведь чтобы квадратик жёлтенький открывал и там 3 кнопки должно быть?
admin: О Боже!
admin: Кто-нибудь, пришлите ко мне уборщицу, пусть мой мозг со стен и потолка отмоет

Последний раз редактировалось Hantet; 26.05.2010 в 21:06.
Hantet вне форума   Ответить с цитированием
Старый 28.05.2010, 18:55   #2
Astellar
Гость
 
Сообщений: n/a
По умолчанию

Ну вот опять-двадцать пять. Ограничения на инструментарий-то какие? С++ и STL использовать можно?
  Ответить с цитированием
Старый 28.05.2010, 20:07   #3
Konctantin
RuDB Dev
 
Аватар для Konctantin
 
Регистрация: 01.02.2010
Адрес: localhost
Сообщений: 592
Сказал(а) спасибо: 323
Поблагодарили 283 раз(а) в 122 сообщениях
Записей в дневнике: 2
Konctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всем
По умолчанию

Ну если на то пошло то можно и язык другой использовать:
Код:
        static void Main(string[] args)
        {
            string text = "В отношении надежности протоколов более низкого, чем TCP, уровня сделаны весьма скромные запросы. TCP предполагает, что он может получить простой, (TCP, TCP)потенциально ненадежный сервис для своих датаграмм со стороны протоколов нижнего уровня. В принципе, протокол TCP должен быть работоспособен на большом наборе коммуникационных систем, начиная с кабельных соединений и кончая сетями с переключением пакетов или электрических цепей";
            string searchText = "TCP";

            foreach (string str in text.Split('.'))
            {
                int count = 0;
                foreach (string t in str.Split(' '))
                {
                    if (t.Contains(searchText))
                        ++count;
                }
                Console.WriteLine(@"{0} - [{1}]", str, count);
            }
            Console.ReadLine();
        }
или еще проще
Код:
        static void Main(string[] args)
        {
            string text = "В отношении надежности протоколов более низкого, чем TCP, уровня сделаны весьма скромные запросы. TCP предполагает, что он может получить простой, (TCP, TCP)потенциально ненадежный сервис для своих датаграмм со стороны протоколов нижнего уровня. В принципе, протокол TCP должен быть работоспособен на большом наборе коммуникационных систем, начиная с кабельных соединений и кончая сетями с переключением пакетов или электрических цепей";
            string searchText = "TCP";

            foreach (string str in text.Split('.'))
            {
                int count = str.Split(' ').Where(n => n.Contains(searchText)).Count();
                Console.WriteLine(@"{0} - [{1}]", str, count);
            }

            Console.ReadLine();
        }
__________________

Последний раз редактировалось Konctantin; 28.05.2010 в 20:14.
Konctantin вне форума   Ответить с цитированием
Старый 28.05.2010, 21:01   #4
Astellar
Гость
 
Сообщений: n/a
По умолчанию

Не совсем катит. Что будет для чисел вида 1.2345? А также для вопросительных и восклицательных предложений

Последний раз редактировалось Astellar; 28.05.2010 в 21:03.
  Ответить с цитированием
Старый 28.05.2010, 23:39   #5
Konctantin
RuDB Dev
 
Аватар для Konctantin
 
Регистрация: 01.02.2010
Адрес: localhost
Сообщений: 592
Сказал(а) спасибо: 323
Поблагодарили 283 раз(а) в 122 сообщениях
Записей в дневнике: 2
Konctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всем
По умолчанию

Ну это уже условия, суть то одна.
__________________
Konctantin вне форума   Ответить с цитированием
Старый 29.05.2010, 00:15   #6
Astellar
Гость
 
Сообщений: n/a
По умолчанию

А вот нет, суть ой какая разная будет, если условия учесть. А их надо учитывать. Вот более правильный вариант, использующий регулярные выражения. И почему никто о них не вспоминает, когда текст обработать надо?
Код:
#include <regex>
#include <iostream>

// just a short name to use
typedef std::tr1::sregex_token_iterator tokenizer;

int main(int argc, char* argv[])
{
    // to show russian text correctly
    setlocale(LC_ALL, "rus_rus.1251");

    // sample text with different types of delimiters
    const std::string text =  "Это наше предложение номер 1!!!!\n" \
        "А это - номер два, так ведь?!\t\t " \
        "Ну и, конечно же, с числами 3.1415 и 2^10...     " \
        "И заодно проверим прямую речь: \"Ты почто боярыню обидел, смерд?\".";
    
    // a pattern to split nearly any text into sentences
    // note that we preserve all odd spaces, etc.
    const std::tr1::regex text_to_sent_p("([^.?!]|\\.\\d+|[.?!]+\")+[.?!]+");

    // your input word must be wrapped into regex
    // btw, we can even search for multiple words at once
    const std::tr1::regex input_str_p("номер");

    const tokenizer end; int word_count = 0;
    for (tokenizer i(text.begin(), text.end(), text_to_sent_p); i != end; ++i)
    {
        std::string sentence((*i).str());
        for (tokenizer j(sentence.begin(), sentence.end(), input_str_p); j != end; ++j)
            ++word_count;

        std::cout << sentence << " " << word_count;

        word_count = 0;
    }

    return 0;
}
Немного пояснений: во-первых, регистр букв учитывается при поиске слова, а во-вторых, ищется именно вхождение слова в предложение (т.е. в слове Пятница будет например найдено слово Пятниц).

Последний раз редактировалось Astellar; 29.05.2010 в 00:18.
  Ответить с цитированием
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.



Текущее время: 01:44. Часовой пояс GMT +3.


ru-mangos.ru - Русское сообщество MaNGOS
Главная цель проекта MaNGOS - обучающая, поэтому разрешается использовать исходный код и собранную программу только для образовательных целей.
Вы не можете использовать MaNGOS в коммерческих целях, а также не разрешается устанавливать публичные серверы на базе MaNGOS.
Любое копирование материалов, информации в любом виде без указания источника - форума Ru-MaNGOS будет считаться нарушением авторских прав и нарушением Уголовного Кодекса РФ, ст. 146 ст. 147.
Перевод vBulletin: zCarot