Форум программистов, компьютерный форум CyberForum.ru

Сравнения двух строк s1 и s2 не используя библиотеку <string.h> - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 15, средняя оценка - 4.93
VolodiaVoz
 Аватар для VolodiaVoz
31 / 31 / 1
Регистрация: 17.11.2010
Сообщений: 140
17.07.2011, 01:00     Сравнения двух строк s1 и s2 не используя библиотеку <string.h> #1
Помогите пожалуйста! Нужно написать программу для сравнения двух строк s1 и s2 не используя библиотеку <string.h>, а создать собственную функцию int Compare (s1, s2) - которая выводит результат:

0 - строки одинаковые
+1 - Строка s1 больше (посимвольно) за s2
-1 - Строка s1 меньше (посимвольно) за s2.

Аналог библиотечной функции strcmp.
Заранее спасибо!
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
17.07.2011, 01:20     Сравнения двух строк s1 и s2 не используя библиотеку <string.h> #2
http://www.student.cs.uwaterloo.ca/~...8c-source.html
надеюсь что прочитаете комментарии к тому коду и разберетесь в нём
VolodiaVoz
 Аватар для VolodiaVoz
31 / 31 / 1
Регистрация: 17.11.2010
Сообщений: 140
17.07.2011, 01:34  [ТС]     Сравнения двух строк s1 и s2 не используя библиотеку <string.h> #3
Но здес используетса библиотека <string.h>! Мне не нужно использовать эту библиотеку! А написать аналог данной функции описанной выше!
Но и за это спасибо!
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
17.07.2011, 01:40     Сравнения двух строк s1 и s2 не используя библиотеку <string.h> #4

я же написал,
Цитата Сообщение от Maxwe11 Посмотреть сообщение
надеюсь что прочитаете комментарии к тому коду и разберетесь в нём
там подключен файл string.h только потому что в этом файле описан прототип этой функции, а реализация(запрограммированый алгоритм) находится по приведенной мной ссылке и не требует string.h

Добавлено через 2 минуты
а вы даже не удосужились почитать, или ваше знание английского ограничено одним словом?
Цитата Сообщение от VolodiaVoz Посмотреть сообщение
Compare (
VolodiaVoz
 Аватар для VolodiaVoz
31 / 31 / 1
Регистрация: 17.11.2010
Сообщений: 140
17.07.2011, 01:54  [ТС]     Сравнения двух строк s1 и s2 не используя библиотеку <string.h> #5
Понятно! Просто глянул Ёсть string.h и подумал что она используетса!
А в щет анг. яз. я б воздержалса!

Добавлено через 9 минут
Может есть другой вариант?
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
17.07.2011, 01:57     Сравнения двух строк s1 и s2 не используя библиотеку <string.h> #6
Цитата Сообщение от VolodiaVoz Посмотреть сообщение
Может есть другой вариант?
варианты всегда есть, вот например обратитесь сюда
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
17.07.2011, 02:30     Сравнения двух строк s1 и s2 не используя библиотеку <string.h> #7
Цитата Сообщение от VolodiaVoz Посмотреть сообщение
Может есть другой вариант?
А то!
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <stdio.h>
 
int compare(const char * a, const char * b){
    return ( *a == *b ) ? ( ( ! *a ) ? 0 : compare(a + 1, b + 1) ) : ( *a < *b ) ? -1 : 1;
}
 
int main(void){
    char a[BUFSIZ], b[BUFSIZ];
    int cmp;
    
    while ( printf("A: ") && scanf("%[^\n]%*c", a) == 1 && printf("B: ") && scanf("%[^\n]%*c", b) == 1 )
        printf("A is %s B\n", ( cmp = compare(a, b) ) < 0 ? "less then" : ( cmp > 0 ) ? "greater then" : "equals to");
    
    return 0;
}
VolodiaVoz
 Аватар для VolodiaVoz
31 / 31 / 1
Регистрация: 17.11.2010
Сообщений: 140
17.07.2011, 02:35  [ТС]     Сравнения двух строк s1 и s2 не используя библиотеку <string.h> #8
Спасибо! Етот вариант подходящей!
Ище раз спасибо!
xAtom
 Аватар для xAtom
910 / 735 / 60
Регистрация: 09.12.2010
Сообщений: 1,346
Записей в блоге: 1
17.07.2011, 10:55     Сравнения двух строк s1 и s2 не используя библиотеку <string.h> #9
Цитата Сообщение от easybudda Посмотреть сообщение
int compare(const char * a, const char * b){
return ( *a == *b ) ? ( ( ! *a ) ? 0 : compare(a + 1, b + 1) ) : ( *a < *b ) ? -1 : 1;
}
Если задать, равные строки но разные вот эта функция вернёт значение 1. Если точнее к стандартной функции strcmp("ado", "dao") она вернёт совсем другое значение не 0, 1, -1 , вот написал что-то похожее.
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include <stdio.h>
 
int  _strcmp(const char* s1, const char* s2) {
      while( *s1 == *s2 ) {
          *s1++;
          *s2++;
          if( ! *s1 && ! *s2)
               return 0;
      }
      do {
          if(! *s1 && *s2)
             return -1;
          if(! *s2 && *s1)
             return  1;
      } while( *s1++ && *s2++);
      return -2;
}
 
 
int main(void) {
 
   printf("%i\n", _strcmp("asp.net", "asp.net") );
   printf("%i\n", _strcmp("pascal",  "pascale") );
   printf("%i\n", _strcmp("mike",    "mik") );
   printf("%i\n", _strcmp("RDO",     "DAO") );
 
   getchar();
   return 0;
}
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
17.07.2011, 11:08     Сравнения двух строк s1 и s2 не используя библиотеку <string.h> #10
Цитата Сообщение от xAtom Посмотреть сообщение
Если задать, равные строки но разные вот эта функция вернёт значение 1. Если точнее к стандартной функции strcmp("ado", "dao") она вернёт совсем другое значение не 0, 1, -1
"Равные, но разные" - это круто! Стандартная strcmp() возвращает отрицательное число, 0, или положительное. Тут по заданию было -1, 0, 1...
И прежде, чем утверждать что-то, неплохо бы сначала в этом убедиться!
Код
$ ./compare
A: ado
B: dao
A is less then B
A:
Gepar
17.07.2011, 12:03
  #11

Не по теме:

Цитата Сообщение от VolodiaVoz Посмотреть сообщение
А в щет анг. яз. я б воздержалса!
Насчёт русского тоже лучше воздержитесь

VolodiaVoz
 Аватар для VolodiaVoz
31 / 31 / 1
Регистрация: 17.11.2010
Сообщений: 140
17.07.2011, 12:11  [ТС]     Сравнения двух строк s1 и s2 не используя библиотеку <string.h> #12
Извените я не очень умею писать по руски.
агерон
 Аватар для агерон
265 / 264 / 33
Регистрация: 12.10.2009
Сообщений: 1,031
18.07.2011, 04:37     Сравнения двух строк s1 и s2 не используя библиотеку <string.h> #13
держи решение
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <stdio.h>
#include <conio.h>
#include <math.h>
 
int strlen(char* str)
{
 char *copy=str;
 while (*str++);
 return str-copy-1;
}
 
int compare(char *first,char *second)
{
 int result=strlen(first)-strlen(second);
 if (result) return result/abs(result);
 while (*first++==*second++);
 first--,second--;
 result=(*first)-(*second);
 return (result)?result/abs(result):result;
}
 
void main()
{
 int i=compare("1235","1253");
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.07.2011, 09:02     Сравнения двух строк s1 и s2 не используя библиотеку <string.h>
Еще ссылки по теме:

C++ Сравнение двух строк string
Строки. Сравнения первых двух половин введенных строк C++
C++ Написать программу сравнения двух строк

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
18.07.2011, 09:02     Сравнения двух строк s1 и s2 не используя библиотеку <string.h> #14
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <stdio.h>
 
int Compare(const char *s1, const char *s2);
 
int main(void)
{
    printf("%d %d %d\n",
           Compare("a", "a"),
           Compare("a", "b"),
           Compare("b", "a"));
    printf("%d %d %d\n",
           Compare("ab", "ab"),
           Compare("a", "ab"),
           Compare("ab", "a"));
    return 0;
}
 
int Compare(const char *s1, const char *s2)
{
    int diff;
    
    for ( ; *s1 && *s1 == *s2; s1++, s2++)
        ;
    diff = *s1 - *s2;
    return diff < 0 ? -1 : diff == 0 ? 0 : 1;
}
Код
[guest@localhost tests]$ ./t
0 -1 1
0 -1 1
[guest@localhost tests]$
Yandex
Объявления
18.07.2011, 09:02     Сравнения двух строк s1 и s2 не используя библиотеку <string.h>
Ответ Создать тему
Опции темы

Текущее время: 00:50. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru