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

реализация strcmp - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 38, средняя оценка - 4.68
infantis
0 / 0 / 0
Регистрация: 10.05.2010
Сообщений: 3
10.05.2010, 22:18     реализация strcmp #1
помогите написать реализацию strcmp
Функция должна принимать два указателя на сравниваемые
строки (возможно Вы должны указать компилятору, что функция
не имеет права модифицировать содержимое строк).
Функция должна возвращать отрицательное значение, если
первая строка лексиграфически меньше второй, 0 - если
они равны и положительное значение, если первая строка
больше второй.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.05.2010, 22:18     реализация strcmp
Посмотрите здесь:

strcmp C++
C++ strcmp()
C++ Функция strcmp
C++ STRCMP
strcmp C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ISergey
Maniac
Эксперт С++
 Аватар для ISergey
1331 / 864 / 50
Регистрация: 02.01.2009
Сообщений: 2,622
Записей в блоге: 1
10.05.2010, 22:31     реализация strcmp #2
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
#include <iostream>
 
unsigned _strlen(const char *rhs){
    int res = 0;
    while(*rhs++) ++res;
 
    return res;
} 
 
// проверка только длины..
int _strcmp(const char *first, const char *last){
    unsigned f = _strlen(first);
    unsigned l = _strlen(last);
 
    if(f == l) return 0;
 
    return (f < l) ? -1 : 1;
}
 
int main(){
 
    std::cout << _strcmp("asd" , "asdf") << std::endl;
    std::cout << _strcmp("asdf", "asdf") << std::endl;
    std::cout << _strcmp("asdf", "asd" ) << std::endl;
 
    return 0;
}
infantis
0 / 0 / 0
Регистрация: 10.05.2010
Сообщений: 3
10.05.2010, 22:53  [ТС]     реализация strcmp #3
спасибо. но, я так понимаю, эта фунция сравнивает длину строк, а не их лексиграфическое значение.
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2294 / 1664 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
10.05.2010, 23:00     реализация strcmp #4
infantis, как то так (не проверял):
C++
1
2
3
4
5
6
7
8
9
10
11
int StrCmp(const char* str1, const char* str2) {
  while (*str1 && *str2) {
    if (*str1 < *str2)
      return -1;
    if (*str1 > *str2)
      return 1;
    ++str1; ++str2;
  }
 
  return *str1? -1 : *str2? 1 : 0;
}
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
10.05.2010, 23:01     реализация strcmp #5
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>
 
int mystrcmp(const char *a, const char *b){
    while ( *a && *b && *a == *b )
        ++a, ++b;
    return *a - *b;
}
 
int main(void){
    char *a = "abcde";
    char *b = "xyz";
    char *c = "abcd";
    char *d = "xyz";
    int res;
    
    printf("A = %s\nB = %s\nC = %s\nD = %s\n\n", a, b, c, d);
    printf("A is %s B\n", ( ( res = mystrcmp(a, b) ) == 0 ) ? "equal to" : ( res < 0 ) ? "less than" : "greater than");
    printf("A is %s C\n", ( ( res = mystrcmp(a, c) ) == 0 ) ? "equal to" : ( res < 0 ) ? "less than" : "greater than");
    printf("A is %s D\n", ( ( res = mystrcmp(a, d) ) == 0 ) ? "equal to" : ( res < 0 ) ? "less than" : "greater than");
    printf("B is %s C\n", ( ( res = mystrcmp(b, c) ) == 0 ) ? "equal to" : ( res < 0 ) ? "less than" : "greater than");
    printf("B is %s D\n", ( ( res = mystrcmp(b, d) ) == 0 ) ? "equal to" : ( res < 0 ) ? "less than" : "greater than");
    printf("C is %s D\n", ( ( res = mystrcmp(c, d) ) == 0 ) ? "equal to" : ( res < 0 ) ? "less than" : "greater than");
    
    return 0;
}
infantis
0 / 0 / 0
Регистрация: 10.05.2010
Сообщений: 3
10.05.2010, 23:18  [ТС]     реализация strcmp #6
всем спасибо, в целом идея ясна.
Yandex
Объявления
10.05.2010, 23:18     реализация strcmp
Ответ Создать тему
Опции темы

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