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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 38, средняя оценка - 4.68
infantis
0 / 0 / 0
Регистрация: 10.05.2010
Сообщений: 3
#1

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

10.05.2010, 22:18. Просмотров 5149. Ответов 5
Метки нет (Все метки)

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

strcmp C++
C++ [Visual C++]strcmp()
C++ strcmp()
C++ strcmp не работает!
функция strcmp C++
C++ Функция strcmp
C++ STRCMP
strcmp C++
C++ Функция strcmp
C++ strcmp
Strcmp C++
C++ Функция strcmp

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ISergey
Maniac
Эксперт С++
 Аватар для ISergey
1345 / 878 / 51
Регистрация: 02.01.2009
Сообщений: 2,643
Записей в блоге: 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
2297 / 1667 / 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
9412 / 5435 / 917
Регистрация: 25.07.2009
Сообщений: 10,428
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
Ответ Создать тему
Опции темы

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