Посимвольное сравнение
|
|
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 |
Сейчас нет на сайте
| Именно посимвольное Просто строки было бы слишком просто для курсового
|
|
| |
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, спасибо но я не очень такие мысли понимаю, мне нужно грамотно объяснить, вот как будете за компом лучше так объясните пожалуйста
Добавлено (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, воооооооотттт то что нужно)) Спасибо большое pelmenka, тоже спасибо
|
|
| |
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, тоже хороший вариант, тоже попробую Всем спасибо
|
|
| |
pelmenka | Дата: Воскресенье, 12 Апреля 2015, 15:28 | Сообщение # 20 |
Драгоценный Тунеядец
Сейчас нет на сайте
| Если срезать ненужные скобочки вокруг первого for, то получится 11 строк.
Сталина в каждый дом!
|
|
| |