Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Центр помощи > [C] Сравнение двух строк |
Автор: Denzel666 16.12.2006, 01:28 |
Приветствую мозговой центр сети интернет...Призываю откликнуться на просьбу...Поступила задача на сравнение 2-х строк ...Сравнивание производить по буквам,цифрам и пробелам...(Язык Си)...решение нужно как воздух...Если же программерам в косяк написать пару строк проги, буду рад хотя бы алгоритму решения...По моим соображениям в строках надо удалить все символы не относящиеся к символам указанным в задаче,а затем производить сравнение непосредственно строк с символами относящимися к поставленной задаче...если это не так просьба поправить меня... |
Автор: Oleg_Ci 16.12.2006, 08:17 | ||
|
Автор: Rockie 16.12.2006, 16:10 |
Олег4, это не Си ![]() |
Автор: Oleg_Ci 16.12.2006, 17:00 | ||
да, ошибочка вышла ![]()
|
Автор: Denzel666 17.12.2006, 02:43 |
здесь как видите сравниваются строки...но это неверное решение...мне необходимо сравнить строки...равенство возможно лишь в том случае если длина строк одинакова и одинаково расположение элементов(символов) в строке...подскажите что не так... |
Автор: Oleg_Ci 17.12.2006, 08:52 | ||
А так ?
|
Автор: Denzel666 18.12.2006, 01:37 |
не очень понятен алгоритм...с этим проблема всегда была... |
Автор: Denzel666 18.12.2006, 02:32 |
int strcmp(char s[],char t[]) { 18/12/2006) for (;*s==*t;s++,t++*) if(*s='\0') return 0; return *s-*t; } функция сравнивающая стринги...все бы ничего да препод у нас галимый...ниче не понял я...Возможно ли переделать вот это в чудо в требуемое? Добавлено @ 02:34 18/12/2006)-вот эта строчка лишняя как вы понимаете |
Автор: cardinal 18.12.2006, 02:36 |
Не понял суть проблемы? Ты не понимаешь, что вам препод написал или эта функция делает не то, что нужно? p.s. пользйуся тегами "код"! |
Автор: semi 18.12.2006, 05:45 |
алгоритм говоришь... ![]() проверяем, равны ли строки по длине. если нет -> ответ отрицательный. если да -> проверяем вхождение строки 1 в строку 2. (там же была вроде стандартная функция, проверяющая наличие подстроки в строке). ну... и соответственно, если возвращает 1 (номер символа с которого начинается подстрока) то ответ положительный, а если null (или что она там возвращает в случае неудачи, не помню...) то отрицательный. Олег4 даже не представляю, как он будет защищать лабу с твоим кодом, если даже не понимает что препод объяснял... ![]() |
Автор: Oleg_Ci 18.12.2006, 15:00 | ||
Вот попроще функция, только делает то что я понял в задании ![]()
|
Автор: Denzel666 19.12.2006, 00:19 |
3: if( isalnum( *c1 ) && isalnum( *c2 )) // если это символ или цыфра Вот это не понятно...Что такое isalnum?Все непонимание на мамом деле в этой строчке кода...Это в лекциях нет...поэтому сетую на препода... Добавлено @ 00:28 Попробую изложить задачу на примере...Допустим даны 2 строки : a df="2 и a df="t2 По условию они сразу же не равны так как имеют разную длину... a df="2 и a df="2 В этом же случае если литеры "a" и в 1-ом и во 2-ом стринге находятся на одном и том же месте , и та же история с остальными символами, т.е. их коды и адрес в строках совпадают , при этом длины строк равны, только в этом случае они равны... |
Автор: Denzel666 19.12.2006, 00:45 | ||||
подскажите пожалуйста как работает эта функция...
|
Автор: cardinal 19.12.2006, 02:17 |
Функция, которая делает проверку на см. комментарий справа от исп. функции. Для начала прочитай о том, что такое указатели... |
Автор: Oleg_Ci 19.12.2006, 17:10 | ||
Это сравнение двух строк, причём сравнивает все символы, а ты задание такое написал Тебе обычное сравнение нужно или сравнение только по буквам,цифрам и пробелам ???
описана, там глава про указатели, почитай ![]() ( isalnum != 0 ) если это символ или цыфра |
Автор: Denzel666 20.12.2006, 00:25 | ||
По буквам цифрам и пробелам...а про isalnum так и не понял...это стандартная ф-ция? |
Автор: cardinal 20.12.2006, 00:29 |
Первое, что выплевывает google... http://www.elook.org/programming/c/isalnum.html |
Автор: Oleg_Ci 20.12.2006, 19:50 |
http://www.chipprog.ru/usr-cgi/emuldescr.cgi?PI=PICE-MC&ANCH=923 или http://cpp2.narod.ru/L4.htm#2, а http://www.rambler.ru/srch?set=www&words=%F4%F3%ED%EA%F6%E8%FF+isalnum&btnG=%CD%E0%E9%F2%E8%21 isalnum - библиотечная функция |
Автор: Denzel666 21.12.2006, 01:22 | ||
это стандартная ф-ция isalnum? Олег4 , можно попросить ссылку на книгу эту(и)? |
Автор: cardinal 21.12.2006, 02:56 |
У меня такое впечатление, что ты и слово "библиотека" неправильно понимаешь... ![]() |
Автор: V.A.KeRneL 21.12.2006, 10:18 |
1) Ссылки на страницы руководства (man-страницы): a) isalnum(): * in english: http://www.opengroup.org/onlinepubs/007908799/xsh/isalnum.html * in russian: http://www.opennet.ru/man.shtml?topic=isalnum&category=3&russian=0 b) strcmp(): * in english: http://www.opengroup.org/onlinepubs/007908799/xsh/strcmp.html * in russian: http://www.opennet.ru/man.shtml?topic=strcmp&category=3&russian=0 2) Denzel666, всё-таки я тебя не пойму! Если уж объясняешь на примерах, то объясняй на них до конца, так чтоб очевидно понятно стало, что именно нужно! Что должна возвращать требуемая тебе функция на следующих «тестах»: ans_strcmp( "123 abc", "123abc" ); //=> Тут, ясен пень, 0, т.е. равны. ans_strcmp( "123 abc", "123 +abc" ); //=> Тут, тоже понятно, ненулевое значение, т.е. неравны. ans_strcmp( "123-ab c", "123+ab c" ); // А тут что? ans_strcmp( "123 ab\"c", "123 ab\\c" ); // И тут? ? В последнем случае длины строк равны, все цыфры, буквы и пробелы одинаковы и стоят на одинаковых позициях, что по твоей изначальной спецификации, вроде, должнен получиться 0 (равны). Функция strcmp() из стандартной библиотеки C для таких паратетров вернёт ненулевое значение (неравны). Так что именно тебе нужно?!. |
Автор: Rockie 21.12.2006, 14:13 | ||
![]() |
Автор: Oleg_Ci 21.12.2006, 17:40 |
да. http://forum.vingrad.ru/topic-33456.html 8 ссылка ![]() |