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

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



ссылка на сообщение  Отправлено: 22.07.21 21:46. Заголовок: Проверить, являются ли две строки изоморфными.


Часто на всяких сайтах, где предлагается решить разные задачи, встречается задача по определению, являются ли две строки изоморфными.

Две строки являются изоморфными, если они имеют одинаковую длину, символы одной строки можно заменить символами другой строки, каждый символ одной строки заменяется уникальным символом другой строки, и никакие два различных символа одной строки не заменяются одним и тем же символом другой строки.

Примеры изоморфных строк

egg и add
paper и title.

Вот пример двух строк, которые не являются изоморфными

foo и bar

Для начала попробуйте написать самостоятельно соответствующую функцию на C, которая определяет, являются ли две строки изоморфными.

Я сам написал такую функцию, так как мне попался в поле зрения вопрос на сайте Stackoverflow, касающийся написания такой функции
Copying a character from one string argument to another in C

Здесь я продублирую свое решение

 
#include <stdio.h>
#include <string.h>
#include <stdbool.h>

bool isIsomorphic( const char *s, const char *t )
{
size_t n = strlen( s );

bool isomorphic = n == strlen( t );

while ( isomorphic && n--)
{
const char *p1 = strchr( s + n + 1, s[n] );
const char *p2 = strchr( t + n + 1, t[n] );

isomorphic = ( !p1 && !p2 ) || ( p1 && p2 && p1 - s == p2 - t );
}

return isomorphic;
}

int main(void)
{
const char *s = "egg";
const char *t = "add";

printf( "\"%s\" is isomorphic with \"%s\" is %s\n",
s, t, isIsomorphic( s, t ) ? "true" : "false" );

s = "foo";
t = "bar";

printf( "\"%s\" is isomorphic with \"%s\" is %s\n",
s, t, isIsomorphic( s, t ) ? "true" : "false" );

s = "paper";
t = "title";

printf( "\"%s\" is isomorphic with \"%s\" is %s\n",
s, t, isIsomorphic( s, t ) ? "true" : "false" );

return 0;
}


Вывод программы на консоль
 
"egg" is isomorphic with "add" is true
"foo" is isomorphic with "bar" is false
"paper" is isomorphic with "title" is true


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


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

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