On-line: гостей 1. Всего: 1 [подробнее..]
Программисты всех стран, объединяйтесь!

АвторСообщение



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


Эта тема может быть полезна для начинающих программистов. В ней описано решение на языках программирования C++ и C# следующего задания.

Имеется заданное слово, например, idiot.

Требуется определеить, есть ли в произвольно введенном предложении буквы, следующие последовательно, из которых можно составить заданное слово.
Например, если введено предложение

I don't like to eat

то в нем присутствуют буквы, следующие последовательно, из которых можно сложить слово idiot. Они выделены жмрным шрифтом

I don't like to eat

На C++ задание легко выполнить, используя стандартный алгоритм std::all_of и соответствующим образом составленного лямбда-выражения.

Однако так как начинающие программисты обычно не знакомы ни со стандартными алгоритмами, ни с лямбда выражениями, то код написан с использованием более-менее распространенных и известных синтаксических конструкций.

Это код на C++

 #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;
}
}



И совершенно аналогичный код можно написать на C#

 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();
}
}
}


Как видно, обе программы, нв C++ и C#, идентичны.

Спасибо: 0 
ПрофильЦитата Ответить
Новых ответов нет


Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 10
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет