|
Языки программирования Изучаем С++, Sql, php, Lua, Python |
|
Опции темы | Поиск в этой теме | Опции просмотра |
26.05.2010, 20:41 | #1 |
Ученый
|
Программа
Задали по программированию задачку, с виду ну очень простая, но никак не подойти к ней правильно
Я сразу попробовал так: Компилятор ругается: к тому же, если в тексте сделать пробел, то в переменную запишется только текст до пробела. Буду очень благодарен за помощь, программу кровь из носа надо написать
__________________
Галя: Вот почему когда я пуск делаю и по ярлыку две то запускается, а если вот мне к примеру надо не из пуска её то ничего и в красном показывает, а надо ведь чтобы квадратик жёлтенький открывал и там 3 кнопки должно быть? admin: О Боже! admin: Кто-нибудь, пришлите ко мне уборщицу, пусть мой мозг со стен и потолка отмоет Последний раз редактировалось Hantet; 26.05.2010 в 21:06. |
28.05.2010, 18:55 | #2 |
Гость
Сообщений: n/a
|
Ну вот опять-двадцать пять. Ограничения на инструментарий-то какие? С++ и STL использовать можно?
|
28.05.2010, 20:07 | #3 |
RuDB Dev
Регистрация: 01.02.2010
Адрес: localhost
Сообщений: 592
Сказал(а) спасибо: 323
Поблагодарили 283 раз(а) в 122 сообщениях
Записей в дневнике: 2
|
Ну если на то пошло то можно и язык другой использовать:
Код:
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. |
28.05.2010, 21:01 | #4 |
Гость
Сообщений: n/a
|
Не совсем катит. Что будет для чисел вида 1.2345? А также для вопросительных и восклицательных предложений
Последний раз редактировалось Astellar; 28.05.2010 в 21:03. |
29.05.2010, 00:15 | #6 |
Гость
Сообщений: 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. |