Форум » C/C++ для начинающих (C/C++ for beginners) » Задача: определить, присутствуют ли в предложении буквы заданного слова по порядку » Ответить

Задача: определить, присутствуют ли в предложении буквы заданного слова по порядку

Сыроежка: Эта тема может быть полезна для начинающих программистов. В ней описано решение на языках программирования C++ и C# следующего задания. Имеется заданное слово, например, idiot. Требуется определеить, есть ли в произвольно введенном предложении буквы, следующие последовательно, из которых можно составить заданное слово. Например, если введено предложение I don't like to eat то в нем присутствуют буквы, следующие последовательно, из которых можно сложить слово idiot. Они выделены жмрным шрифтом I don't like to eat На C++ задание легко выполнить, используя стандартный алгоритм std::all_of и соответствующим образом составленного лямбда-выражения. Однако так как начинающие программисты обычно не знакомы ни со стандартными алгоритмами, ни с лямбда выражениями, то код написан с использованием более-менее распространенных и известных синтаксических конструкций. Это код на C++ [pre2] #include <iostream> #include <string> #include <cctype> // Program Idiot. Copyright 2013, Vladimir Grigoriev (Vlad from Moscow) // ==================================================================== // Determines whether a given word can be present in a sentence int main() { while ( true ) { std::cout << "Enter a sentence (<enter> to quit): "; // "i don't like to eat" std::string s; std::getline( std::cin, s ); if ( s.empty() ) break; const std::string idiot = "idiot"; std::string::size_type pos = 0; for ( char c : idiot ) { const char letter[] = { c, static_cast<char>( toupper( c ) ) }; pos = s.find_first_of( letter, pos ); if ( pos == std::string::npos ) break; ++pos; } std::cout << "There is " << (pos != std::string::npos ? "no " : "") << " word \"" << idiot << "\" in the sentence" << std::endl; } } [/pre2] И совершенно аналогичный код можно написать на C# [pre2] using System; namespace Idiot { /// <summary> /// Program Idiot. Copyright 2013, Vladimir Grigoriev (Vlad from Moscow) /// ==================================================================== /// Determines whether a given word can be present in a sentence /// </summary> class Program { static void Run() { while (true) { Console.Write("Enter a sentence (<enter> to quit): "); // "i don't like to eat" string s = Console.ReadLine(); if (string.IsNullOrEmpty( s )) break; const string idiot = "idiot"; int pos = 0; foreach (char c in idiot) { char[] letter = { c, char.ToUpper(c) }; pos = s.IndexOfAny( letter, pos); if (pos == -1) break; ++pos; } Console.WriteLine("There is {0}word \"{1}\" in the sentence\n", pos == -1 ? "no " : "", idiot); } } static void Main() { Program.Run(); } } }[/pre2] Как видно, обе программы, нв C++ и C#, идентичны.

Ответов - 0



полная версия страницы