Среда, 06 Июля 2022, 12:49

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Форум игроделов » Программирование » C/C++ » Посимвольное сравнение
Посимвольное сравнение
IzBePgДата: Воскресенье, 12 Апреля 2015, 14:28 | Сообщение # 1
Сейчас нет на сайте
Есть некое число загаданное компьютером(тип AnsiString)
Вводя число в Edit1 последствием Enter нужно взять число из Edit и сравнить с AnsiString

Код

if ( Key == VK_RETURN)
  {
   for(i=0;i<4;i++) // так как число 4-х значное
   {
    if(вот здесь как условие поставить?)
    {
    ListBox1->Items->Add("Одинаково");
    }
   }
}

Пробовал ed.Length(i)==cow.secnum.Length(i)
да ругается на что-то

Добавлено (12 апреля 2015, 14:28)
---------------------------------------------
можно-ли использовать функцию strcmp для такого посимвольного сравнения?

hero564Дата: Воскресенье, 12 Апреля 2015, 14:31 | Сообщение # 2
Made in Ukraine
Сейчас нет на сайте
IzBePg, а нужно именно посимвольное сравнение? просто строки сравнить нельзя?
IzBePgДата: Воскресенье, 12 Апреля 2015, 14:32 | Сообщение # 3
Сейчас нет на сайте
Именно посимвольное
Просто строки было бы слишком просто для курсового biggrin
hero564Дата: Воскресенье, 12 Апреля 2015, 14:41 | Сообщение # 4
Made in Ukraine
Сейчас нет на сайте
Если я все правильно понял то переменная в которую записывает комп это Edit, а в которую вводит пользователь Edit1.
Так вот система такова - изначально переменная isMatch=true;
Если хоть одни из элементов строк не совпадают то ее значение меняется на isMatch=false;
Если же в конце проверки isMatch=true; значит строки одинаковы и мы доваляем их в списокж
Код
if ( Key == VK_RETURN)
     {
      bool isMatch = true;//переменная отвечающая за совпадения
      for(i=0;i<4;i++) // так как число 4-х значное
      {
       if(!(Edit1[i]==Edit[i]))//посимвольно проверяем совпадают ли значения
       {
           isMatch=false; //если не совпадают то меняем значение на false
       }
      }
      if (isMatch){
          ListBox1->Items->Add("Одинаково");
      }
}


Сообщение отредактировал hero564 - Воскресенье, 12 Апреля 2015, 14:42
IzBePgДата: Воскресенье, 12 Апреля 2015, 14:48 | Сообщение # 5
Сейчас нет на сайте
Не совсем верно. При старте программы компьютер будто бы загадывает число, тип AnsiString
Код
while(cow.secnum.Length()<4)
{
cow.secnum=random(9999);
}

Вот будто-бы компьютер придумал число
А пользователь вводит в Edit1 4-х значное число и далее нужно вот сравнение посимвольное
Цитата
Нужно отгадать загаданное число, которое состоит из неповторяющихся цифр и начинается не с нуля. Путем ввода любого числа, даются подсказки "быки" и "коровы":
Бык - число угадано и стоит на верном месте
Корова - число угадано, но позиция неверная

Вот и получается посимвольно
pelmenkaДата: Воскресенье, 12 Апреля 2015, 14:52 | Сообщение # 6
Драгоценный Тунеядец
Сейчас нет на сайте
Код

bool isEqual(const char *str1, const char *str2)
{
for(int i = 0; i < 4; i++)
if(str1[i] != str2[i])
return 0;
return 1;
}


Вот функция. Абсолютную правильность не гарантирую, т.к. писал с мобилки в автобусе, но суть, думаю, понятна


Сталина в каждый дом!
hero564Дата: Воскресенье, 12 Апреля 2015, 14:53 | Сообщение # 7
Made in Ukraine
Сейчас нет на сайте
так проблема в названии переменной, или я не понял?
IzBePgДата: Воскресенье, 12 Апреля 2015, 15:01 | Сообщение # 8
Сейчас нет на сайте
hero564, да не, названия тут ни причем)
Суть в том что, одна переменная типа AnsiString, а другой переменной нету, просто вводится текст в Edit1 и вот из этого текста берется число для сравнения и вот это все нужно сравнить посимвольно)
Цитата
Бык - число угадано и стоит на верном месте
Корова - число угадано, но позиция неверная

pelmenka, спасибо но я не очень такие мысли понимаю, мне нужно грамотно объяснить, вот как будете за компом лучше так объясните пожалуйста smile

Добавлено (12 апреля 2015, 15:01)
---------------------------------------------
То есть допустим загаданное число в AnsiString 4952, а мы вводим в Edit1 2594
Сравниваем посимвольно.
4 не равно 2, но есть в веденном нами числе, значит корова
и т.д
если числа совпадают допустим ввели 4935, значит будет 2 быка и 2 коровы, так как числа 4 и 9 совпадают, а числа 3 и 5 есть в загаданном нами числе, но стоят в неправильном порядке.
Ух надеюсь понятно объяснил)


Сообщение отредактировал IzBePg - Воскресенье, 12 Апреля 2015, 15:02
pelmenkaДата: Воскресенье, 12 Апреля 2015, 15:04 | Сообщение # 9
Драгоценный Тунеядец
Сейчас нет на сайте
Короче, тебе надо что-бы кто-то за тебя лабу сделал, а не посимвольное сравнение

Сталина в каждый дом!
IzBePgДата: Воскресенье, 12 Апреля 2015, 15:06 | Сообщение # 10
Сейчас нет на сайте
pelmenka, ну кто как думает
pelmenkaДата: Воскресенье, 12 Апреля 2015, 15:08 | Сообщение # 11
Драгоценный Тунеядец
Сейчас нет на сайте
Цитата IzBePg ()
4 не равно 2
это сравнение
Цитата IzBePg ()
но есть в веденном нами числе, значит корова
а это уже поиск числа
Если соеденить все вместе, то получится лаба.


Сталина в каждый дом!
IzBePgДата: Воскресенье, 12 Апреля 2015, 15:09 | Сообщение # 12
Сейчас нет на сайте
Далее то я сам сделаю, мне просто нужно сравнение, для грамотного объяснения нужно все условие не правда-ли?
Вот я описал, человек не понял, Я разъяснил полностью что и как, думаю стало понятнее.
Я же говорю кто как думает
pelmenkaДата: Воскресенье, 12 Апреля 2015, 15:14 | Сообщение # 13
Драгоценный Тунеядец
Сейчас нет на сайте
Ну я тебе и написал. Сравниваешь строки целиком. Если равны, то число угадано.
Затем сравниваешь их посимвольно.
Если равно, то бык.
Если не равно, то ищешь число в строке. Нашел - корова.


Сталина в каждый дом!
hero564Дата: Воскресенье, 12 Апреля 2015, 15:17 | Сообщение # 14
Made in Ukraine
Сейчас нет на сайте
Код
for(int i=0;i<4;i++){
if (Edit[i]==Edit1[i]){
// бык
}else{
bool isMatch=false;
for(int j=0;j<4;j++){
if (Edit[i]==Edit1[j]){
isMatch=true;
}
}
if (isMatch){
//корова
}
}
}


Сообщение отредактировал hero564 - Воскресенье, 12 Апреля 2015, 15:19
falcowareДата: Воскресенье, 12 Апреля 2015, 15:18 | Сообщение # 15
старожил
Сейчас нет на сайте
pelmenka,

CAnsiString sStrOrigin;
CAnsiString sStr = GetWindowText(ID_EDIT1);

int nStrOrigin = sStrOrigin.Tolnt();
int nStr = sStr.Tolnt();

if((nStrOrigin % 10 == nStr % 10) && (nStrOrigin % 100 / 10 == nStr % 100 / 10 ) && (nStrOrigin % 1000 / 100 == nStr % 1000 / 100 ) && (nStrOrigin % 10000 / 1000 == nStr % 10000 / 1000){ bMatch = true; }
hero564Дата: Воскресенье, 12 Апреля 2015, 15:22 | Сообщение # 16
Made in Ukraine
Сейчас нет на сайте
Отформатированный вариант
IzBePgДата: Воскресенье, 12 Апреля 2015, 15:22 | Сообщение # 17
Сейчас нет на сайте
hero564, воооооооотттт то что нужно))
Спасибо большое smile
pelmenka, тоже спасибо smile
pelmenkaДата: Воскресенье, 12 Апреля 2015, 15:25 | Сообщение # 18
Драгоценный Тунеядец
Сейчас нет на сайте
Код

      char result[4] = {0, 0, 0, 0};
      for(int i = 0; i < 4; i++)
      {
          if(str1[i] == str2[i])
              result[i] = 1; //символ равен
          else
              for(int j = 0; j < 4; j++)
                  if(str1[j] == str2[i])
                  {
                      result[i] = 2; //символ не равен, но есть в числе
                      break;
                  }
      }

Соответственно для даждого символа данные о сравнении запишутся в result


Сталина в каждый дом!

Сообщение отредактировал pelmenka - Воскресенье, 12 Апреля 2015, 15:26
IzBePgДата: Воскресенье, 12 Апреля 2015, 15:26 | Сообщение # 19
Сейчас нет на сайте
pelmenka, тоже хороший вариант, тоже попробую smile
Всем спасибо smile
pelmenkaДата: Воскресенье, 12 Апреля 2015, 15:28 | Сообщение # 20
Драгоценный Тунеядец
Сейчас нет на сайте
Если срезать ненужные скобочки вокруг первого for, то получится 11 строк.

Сталина в каждый дом!
Форум игроделов » Программирование » C/C++ » Посимвольное сравнение
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2022 Рейтинг