Модераторы: Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [Delphi]Сравнение строк. с помшью ф-ции ORD, по кодам букв сравнить строки 
:(
    Опции темы
Нэраварин
Дата 9.3.2009, 14:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 46
Регистрация: 9.3.2009

Репутация: нет
Всего: нет



С помощию множества решить неудалось т.к оно неможет содержать одинаковые эл. и например слово Бар и Абар оно сочтёт одним и тем же (если просто буквы сравнивать).
Идея алгоритма такова что нужно как то завести два масива вних впихать через ф-цию ORD коды символов и пробежав по масиву выяснить можно ли при перестановки букв из одного слова получить другое  (ну например ток-кот). 

Мой враг чистый лист,  мозг остановился или совсем у меня его нет smile , такое чувство что я даже забыл оператор присваивания, непонимаю как работает функция ORD и как с помощью неё вытащить с Edit(с текстом) код буквы а потом в масив впихнуть (это же очень просто, "но  я вобще невижу кода у себя в голове")

Условие задачи таково :Пусть даны две строки str1 и str2. Необходимо выяснить, можно ли из str1 путём перестановки литер получить строку str2

Пожалуйста помогите написать код.....

Это сообщение отредактировал(а) Нэраварин - 9.3.2009, 14:31
PM MAIL   Вверх
grigiv
Дата 11.3.2009, 07:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 32
Регистрация: 1.12.2008

Репутация: -3
Всего: -3



Здравствуйте!
Еще нужна помощь?
Помогу за вознаграждение.

Обращайтесь:
[email protected]
http://www.grigiv.h15.ru

P.S. Высылайте подробное задание и сообщите желаемый срок выполнения работы.

PM MAIL   Вверх
Нэраварин
Дата 11.3.2009, 15:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 46
Регистрация: 9.3.2009

Репутация: нет
Всего: нет



Если бы у мну было много денег я бы непарился отсыпал кому нада и все бы задачи были решены, но так как я руский а все русские любят холяву smile  то ....я расчитываю на безкорысную помощь smile 
PM MAIL   Вверх
zim22
Дата 11.3.2009, 15:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 16
Всего: 69



Цитата(Нэраварин @  9.3.2009,  14:17 Найти цитируемый пост)
Пусть даны две строки str1 и str2. Необходимо выяснить, можно ли из str1 путём перестановки литер получить строку str2

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



--------------------
PM MAIL   Вверх
Нэраварин
Дата 11.3.2009, 15:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 46
Регистрация: 9.3.2009

Репутация: нет
Всего: нет



Цитата(zim22 @ 11.3.2009,  15:19)
Цитата(Нэраварин @  9.3.2009,  14:17 Найти цитируемый пост)
Пусть даны две строки str1 и str2. Необходимо выяснить, можно ли из str1 путём перестановки литер получить строку str2

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

А можно примерчиком в виде кода?   smile 
PM MAIL   Вверх
zim22
Дата 11.3.2009, 15:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 16
Всего: 69



Цитата(Нэраварин @  11.3.2009,  15:24 Найти цитируемый пост)
А можно примерчиком в виде кода?

только на С++
Код
#include <iostream>
#include <string>
#include <algorithm>

int main(int argc, char *argv[])
{
    std::string s1("ivan");
    std::string s2("navi");

    std::sort(s1.begin(), s1.end());
    std::sort(s2.begin(), s2.end());

    if (s1 == s2)
        std::cout << "Equal" << std::endl;
    else
        std::cout << "Not equal" << std::endl;
    
    return 0;
}




--------------------
PM MAIL   Вверх
Нэраварин
Дата 12.3.2009, 11:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 46
Регистрация: 9.3.2009

Репутация: нет
Всего: нет



To zim22  пасиба конешно за помощь, но мне нужен пример на делфи и имено по такому алгоритму:
В массив впихать через ф-цию ORD коды символов, и пробежав по масиву,(и сравнив все коды символов) выяснить можно ли при перестановки букв из одного слова получить другое  (ну например ток-кот).   

С++ я незнаю но так посмотрев на код я понел что ты просто сортируешь а потом сравниваешь две строки; Но строки не имеют одинаковую длину просто пользователь вводит в Edit'ы разные слова, а мне нужно пробежав по двум этим строкам вывести на лейбл ответ можно ли составить из 1-го 2-е слово.(то есть банально если есть такое же кол-во букв и используются теже буквы то ответ "да" и пофиг если там будет абракадабра)

на паскале вроде бы нет такого для строк, а мне нужен пример кода(на паскале) где из Edit1 вытягивается с помощью функции ORD код символа и вставляется в масив вот имено это я и не понимаю как написать на паскале smile   smile  
PM MAIL   Вверх
morpheyushka
Дата 12.3.2009, 13:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Зеленый человек
**


Профиль
Группа: Участник
Сообщений: 563
Регистрация: 26.2.2008
Где: Киев

Репутация: 1
Всего: 8



Цитата(Нэраварин @  12.3.2009,  11:56 Найти цитируемый пост)
из Edit1 вытягивается с помощью функции ORD код символа и вставляется в масив вот имено это я и не понимаю как написать на паскале smile   smile   

а что тут не понятного?
Код

var
  S: String;
  i: Integer;
  a: array of Integer;
begin
  S := Edit1.Text;
  SetLength(a, Length(S));
  for i := 0 to Length(S - 1) do
    a[i] := Ord(S[i+1]);
end;



--------------------
user posted image
Спасибо делается вот так!!!
PM MAIL WWW   Вверх
Нэраварин
Дата 14.3.2009, 13:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 46
Регистрация: 9.3.2009

Репутация: нет
Всего: нет



Цитата(morpheyushka @ 12.3.2009,  13:55)
Цитата(Нэраварин @  12.3.2009,  11:56 Найти цитируемый пост)
из Edit1 вытягивается с помощью функции ORD код символа и вставляется в масив вот имено это я и не понимаю как написать на паскале smile   smile   

а что тут не понятного?
Код

var
  S: String;
  i: Integer;
  a: array of Integer;
begin
  S := Edit1.Text;
  SetLength(a, Length(S));
  for i := 0 to Length(S - 1) do
    a[i] := Ord(S[i+1]);
end;



В строчке for i := 0 to Length(S - 1) do ошибка типо мол несовместимые типы строка и целое число, да и при том что то нехочет работать вбивка в масив таким образом
PM MAIL   Вверх
zim22
Дата 14.3.2009, 13:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 16
Всего: 69



Цитата(Нэраварин @  14.3.2009,  13:38 Найти цитируемый пост)
for i := 0 to Length(S - 1) do

попробуй так:
for i := 0 to Length(S) - 1 do


--------------------
PM MAIL   Вверх
Нэраварин
Дата 19.3.2009, 15:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 46
Регистрация: 9.3.2009

Репутация: нет
Всего: нет



спасибо вам обоим за помощь, жаль немогу повысить вам репутацию, нет прав
PM MAIL   Вверх
Нэраварин
Дата 17.4.2009, 12:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 46
Регистрация: 9.3.2009

Репутация: нет
Всего: нет



Оказалось, что решение этой задачи с помощью сортировки массива и поиск в нём совпадени оказалась неэффективная (Мол а что если у вас будет очень много слов и сортировка работать будет долго неэкономно не практично и т.п)

Я так думаю нужно впихнуть в массив коды букв или сами буквы(без разницы какого типа будет масив подойдут оба способа) и одновременно проходится по двум массивам и если находятся одинаковые буквы в них удалять их из масива такой логикой по идее мы прийдём к тому что у масивов будет нуль различий(в случае если можно составить слова) нуль различий и будет признаком схожести слов, но вот как это записать  на паскале "проходится одновремено по двум масивам да ещё и удалять одинаковые символы" я никак додуматься немогу особено как их удалять из масива.  smile   
Пожалуйста подскажите smile 


Это сообщение отредактировал(а) Нэраварин - 1.5.2009, 00:18
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.0509 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.