Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Программирование под Windows > C++ Builder
Перезагрузить страницу Создание программы которая читает слова наоборот
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
imported_san4es imported_san4es вне форума
Member
 
Сообщений: 12
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 26.11.2005
По умолчанию Создание программы которая читает слова наоборот - 13.12.2005, 02:53

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

Код:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
char slovo[25], slovo1[25], slovo2[25];
int i, j, n, a;

Memo1->Lines->LoadFromFile("slovar.txt");

n =  Memo1->Lines->Count;    a = 0;

for (i=0; i<(n-1); i++)
     {
     strcpy (slovo, ((Memo1->Lines->Strings[i]).c_str())); //запоминаем i-тую строку
     strcpy (slovo1, slovo);
     strrev(slovo1);    // переворачиваем slovo1
     for (j = (i+1); j < n; j++)
         {
         strcpy (slovo2, ((Memo1->Lines->Strings[j]).c_str())); //запоминаем след. строку
         if (slovo2 == slovo1) //если перевёрнутое слово совпадает с нормальным то
         {                     //записываем их в Memo2
         Memo2->Lines->Strings[a] = strcat (strcat (slovo2,  "  "),  slovo);
         a++;
         }
         }
     }
}
долго мучаюсь. перепробовал много вариантов, этот кажется больше похож на нужный, но ...
Вообщем помогите найти ошибку.
заранее благодарен.

ещё вопросик:
char str[10];
str = ""; // выдаёт ошибку e2277 не только на "" , но и на другие значения. что не так?
Ответить с цитированием
  (#2 (permalink)) Старый
Gorbach Gorbach вне форума
Member
 
Сообщений: 67
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 27.10.2005
По умолчанию Re: нужна помощь - 13.12.2005, 03:08

Код:
...
if (slovo2 == slovo1) //не правильно, смотри функцию strcmp 
...
Цитата:
Originally posted by san4es
[b]ещё вопросик:
char str[10];
str = "";
Код:
//либо
char str[10];
strcpy(str,"");

//либо
char str[10]="";
Ответить с цитированием
  (#3 (permalink)) Старый
imported_san4es imported_san4es вне форума
Member
 
Сообщений: 12
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 26.11.2005
По умолчанию 13.12.2005, 03:24

strcmp пробовал - не получается.
Ответить с цитированием
  (#4 (permalink)) Старый
Gorbach Gorbach вне форума
Member
 
Сообщений: 67
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 27.10.2005
По умолчанию 13.12.2005, 03:29

Страно, что не получается. Тогда напиши свою функцию сравнения двух строк, что-то вроде этого
Код:
int cmpstr(const char *str1,const char *str2)
{
if(strlen(str1)>strlen(str2)) return 1;
if(strlen(str1)<strlen(str2)) return -1;
asm{
xor eax,eax
mov esi,str1
mov edi,str2
mark5:
mov cl,[esi]
mov ch,[edi]
cmp cl,ch
jnz less
cmp cl,0
jz equil
inc esi
inc edi
jmp mark5
less:
dec eax
dec eax
equil:
}
}
Ответить с цитированием
  (#5 (permalink)) Старый
imported_san4es imported_san4es вне форума
Member
 
Сообщений: 12
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 26.11.2005
По умолчанию 13.12.2005, 03:49

в "if (strcmp (str1, str2))" забыл поставить "== 0"
всё работает. спасибо.
Ответить с цитированием
Ads.
  (#6 (permalink)) Старый
imported_san4es imported_san4es вне форума
Member
 
Сообщений: 12
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 26.11.2005
По умолчанию 13.12.2005, 21:55

чёта я поторопился с выводом.
программа почему-то находит только 2 слова - первое и последнее.
Код:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
char slovo[25], slovo1[25], slovo2[25];
int i, j, n, a;

n =  Memo1->Lines->Count;    a = 0;

for (i=0; i<(n-1); i++)
     {
     strcpy (slovo, ((Memo1->Lines->Strings[i]).c_str())); //запоминаем i-тую строку
     strcpy (slovo1, slovo);
     strrev(slovo1);    // переворачиваем slovo1
     for (j = (i+1); j < n; j++)
         {
         strcpy (slovo2, ((Memo1->Lines->Strings[j]).c_str())); //запоминаем след. строку
         if (strcmp(slovo2, slovo1) == 0) //если перевёрнутое слово совпадает с нормальным то
           {                     //записываем их в Memo2
            Memo2->Lines->Strings[a] = strcat (strcat (slovo2,  "  "),  slovo);
            a++;
           }
         }
     }
}
вот словарь
[list][*]клоп[*]проба[*]рим[*]бар[*]кольцо[*]раб[*]нефть[*]книга[*]полк[*]кнопка[*]мир[list]
??????
Ответить с цитированием
  (#7 (permalink)) Старый
kelz kelz вне форума
Member
 
Сообщений: 511
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 27.05.2004
По умолчанию Re: нужна помощь - 14.12.2005, 00:44

Цитата:
Originally posted by san4es
[b]ещё вопросик:
char str[10];
str = ""; // выдаёт ошибку e2277 не только на "" , но и на другие значения. что не так?
Переменная str является массивом символов char, а """" является указателем на char, т.е. char*. В общем компилятор ругается на присваивание типу char[] типа char*

Код:
 
str[0] = 0;
уберет проблемы т.к. строка всегда должна закрываться нулем
Ответить с цитированием
  (#8 (permalink)) Старый
Gorbach Gorbach вне форума
Member
 
Сообщений: 67
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 27.10.2005
По умолчанию 15.12.2005, 03:15

Цитата:
Originally posted by san4es
[b]
Код:
...
Memo2->Lines->Strings[a] = strcat (strcat (slovo2,  "  "),  slovo);
a++;
...
замени эти две строки на
Код:
...
Memo2->Lines->Add(strcat (strcat (slovo2,  "  "),  slovo));
...
и будет тебе счастье
и впредь, добавляя куда-то что-либо используй функции Add и ей подобные
Ответить с цитированием
  (#9 (permalink)) Старый
imported_san4es imported_san4es вне форума
Member
 
Сообщений: 12
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 26.11.2005
По умолчанию 15.12.2005, 09:05

спасибо
Ответить с цитированием
Ads
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создание программы, которая данные таблицы хранит в файлах Day.XBB imported_rocky7 C++ Builder 2 22.02.2010 17:53
Написать программу, которая позваляет кодировать слова fantomik85 Вопросы начинающих программистов 4 20.09.2007 15:45
Описать функцию, которая выводит телефон по фамилии и наоборот costa Lisp 3 19.11.2006 15:41
Написание программы, печатающей вводимые слова по одному в строке на C++ Aleksa Вопросы начинающих программистов 16 09.05.2006 13:01
Создание программы которая будет считать деньги pikass Вопросы начинающих программистов 4 20.02.2006 14:33
Создание программы, которая попиксельно анализирует кадры видеофайла imported_Phoenix___ Visual C++ 3 29.12.2005 17:06
Надо написать программу которая пишет в ЛПТ порт и читает из него под Win XP Zven C++ Builder 4 18.07.2005 17:16
Как написать функцию, которая читает данные о ноутбуках из файла note.txt Ramane Вопросы начинающих программистов 0 16.05.2005 10:12
Написать функцию, которая читает данные о ноутбуках из файла note.txt Кит С/С++ 6 09.05.2005 02:20
Иностранные слова создание списка немецких слов larglt C++ Builder 0 02.03.2005 10:37
Как написать программу, которая, читает текстовый файл Anonymous Вопросы начинающих программистов 3 16.11.2004 02:41
Написание программы, которая выводила бы своё имя Merl1n Вопросы начинающих программистов 6 29.08.2004 06:47



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов