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

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

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

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

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

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

strcmp - C++
Вот изучаю С++, тут столкнулся с простой проблеммой, функция strcmp,которая проверяет на равенство 2 строки между собою. Попробывал...

strcmp - C++
Не могу понять, как правильно прировнять два слова. КОгда компилирую и ввожу слово, програма самостаятельно закрываеться, точне...

Strcmp - C++
Пользуюсь Visual Studio 2013. Читай книжку, выполняю примеры. Там есть пример с использованием strcmp и сказано подключить <cstring>. У...

strcmp - C++
slovo={'d','d','d'}; char *slovo2=new char; for(int i=0;i<k;i++) { cin>>slovo2; } int s=strcmp(slovo2,slovo); и ввожу...

STRCMP - C++
Как работает функция strcmp? strncmp? while(L<R) { m=(L+R)/2; ...

strcmp() - C++
#include "stdafx.h" #include <iostream> #include <cstdio> #include <cstring> using namespace std; int main() { ...

5
ISergey
Maniac
Эксперт С++
1397 / 908 / 56
Регистрация: 02.01.2009
Сообщений: 2,714
Записей в блоге: 1
10.05.2010, 22:31 #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;
}
0
infantis
0 / 0 / 0
Регистрация: 10.05.2010
Сообщений: 3
10.05.2010, 22:53  [ТС] #3
спасибо. но, я так понимаю, эта фунция сравнивает длину строк, а не их лексиграфическое значение.
0
CyBOSSeR
Эксперт С++
2307 / 1680 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
10.05.2010, 23:00 #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;
}
1
easybudda
Модератор
Эксперт CЭксперт С++
9917 / 5840 / 976
Регистрация: 25.07.2009
Сообщений: 11,014
10.05.2010, 23:01 #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;
}
1
infantis
0 / 0 / 0
Регистрация: 10.05.2010
Сообщений: 3
10.05.2010, 23:18  [ТС] #6
всем спасибо, в целом идея ясна.
0
10.05.2010, 23:18
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.05.2010, 23:18
Привет! Вот еще темы с ответами:

Не работает strcmp - C++
Подскажите, пожалуйста, условие не срабатывает (14 строка), хотя должно visits++ делать. В строке tmp_month находится строка &quot;Sep&quot;. ...

[Visual C++]strcmp() - C++
Нужно слова, которые считываются в буфер stroka, отсортировать по алфавиту с пом. strcmp. Ошибка в том, что в условии if (strcmp(...

функция strcmp - C++
какое бы не было nazv_otdela всегда пишет равны как лечить? void predpri9tie::zad() { cout&lt;&lt;&quot;vvedite nugniy otdel&quot;&lt;&lt;endl; ...

функция strcmp - C++
void h(anceta*a, int n){ for( int i = 0; i&lt;n; i--) for(int j = 0; j &lt; i; j++) { strcmp(a.fam,a.fam); if( ...


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

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

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