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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 15, средняя оценка - 4.93
VolodiaVoz
31 / 31 / 1
Регистрация: 17.11.2010
Сообщений: 140
#1

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

17.07.2011, 01:00. Просмотров 1948. Ответов 13
Метки нет (Все метки)

Помогите пожалуйста! Нужно написать программу для сравнения двух строк s1 и s2 не используя библиотеку <string.h>, а создать собственную функцию int Compare (s1, s2) - которая выводит результат:

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

Аналог библиотечной функции strcmp.
Заранее спасибо!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.07.2011, 01:00
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Сравнения двух строк s1 и s2 не используя библиотеку <string.h> (C++):

Вычислить длину введенной с клавиатуры строки используя библиотеку string - C++
Напишите программу, которая вычисляет длину введенной с клавиатуры строки используя библиотеку string

Функция сравнения двух строк - C++
Написать функцию сравнения двух строк, используя указатели на них. Прошу помочь написать код программа для заданного условия

Программа сравнения двух строк - C++
Написать программу сравнения двух строк на языке с++ помогите, пожалуйста

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

Доделать программу, сравнения двух строк - C++
Задание: Написать программу с использованием функции, которая сравнивает две строки, заданные в качестве ее аргументов. Если аргумент...

Строки. Сравнения первых двух половин введенных строк - C++
У меня что-то не выходит даже понять задания, что от меня требуется. Может у кого-то есть хоть похожая заготовка? Вот задание: Написать...

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

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

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

Добавлено через 9 минут
Может есть другой вариант?
0
Jupiter
Каратель
Эксперт С++
6559 / 3980 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
17.07.2011, 01:57 #6
Цитата Сообщение от VolodiaVoz Посмотреть сообщение
Может есть другой вариант?
варианты всегда есть, вот например обратитесь сюда
1
easybudda
Модератор
Эксперт CЭксперт С++
9683 / 5633 / 956
Регистрация: 25.07.2009
Сообщений: 10,813
17.07.2011, 02:30 #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;
}
1
VolodiaVoz
31 / 31 / 1
Регистрация: 17.11.2010
Сообщений: 140
17.07.2011, 02:35  [ТС] #8
Спасибо! Етот вариант подходящей!
Ище раз спасибо!
0
xAtom
915 / 740 / 60
Регистрация: 09.12.2010
Сообщений: 1,346
Записей в блоге: 1
17.07.2011, 10:55 #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;
}
1
easybudda
Модератор
Эксперт CЭксперт С++
9683 / 5633 / 956
Регистрация: 25.07.2009
Сообщений: 10,813
17.07.2011, 11:08 #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:
1
Gepar
17.07.2011, 12:03
  #11

Не по теме:

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

1
VolodiaVoz
31 / 31 / 1
Регистрация: 17.11.2010
Сообщений: 140
17.07.2011, 12:11  [ТС] #12
Извените я не очень умею писать по руски.
0
агерон
268 / 267 / 33
Регистрация: 12.10.2009
Сообщений: 1,061
18.07.2011, 04:37 #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");
}
0
accept
4823 / 3244 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
18.07.2011, 09:02 #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]$
0
18.07.2011, 09:02
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.07.2011, 09:02
Привет! Вот еще темы с ответами:

Написать программу, предназначенную для сравнения двух строк - C++
Написать программу, предназначенную для сравнения двух строк. (Строка считается большой, если при упорядочивании в алфавитном порядке она...

Сравнение двух строк string - C++
Добрый день. Никак не пойму почему не хочет работать такой способ сравнения двух string строк, сравнивает верно только если ввести...

Присвоить переменной типа string сумму двух других строк - C++
Как это вооплотить? Почему при таком подходе просто зависание String a=&quot;Номер группы - &quot;; String c; Cin&gt;&gt;c; String x={a,c}; ...

Сравнение двух строк (экземпляры класса string ) задействуя метод compare - C++
Здравствуйте, мне необходимо сравнить два экземпляра класса string, один из экземпляров вводится с клавиатуры, второй экземпляр берется из...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru