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

strcmp - C++

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 23, средняя оценка - 4.96
Golovastik
 Аватар для Golovastik
11 / 11 / 0
Регистрация: 25.05.2009
Сообщений: 435
01.09.2009, 21:06     strcmp #1
Вот изучаю С++, тут столкнулся с простой проблеммой, функция strcmp,которая проверяет на равенство 2 строки между собою. Попробывал реализовать, но что-то она не хочет проверять.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
#include <cstdio>
using namespace std;
 
int main()
{
char s1[80], s2[80];
setlocale(0,"");
strcpy(s1, "С++");
strcpy(s2," -это мощный язык");
 
cout<<"Длины строк: "<<strlen(s1)<<' '<<strlen(s2)<<endl;
 
if(!strcmp(s1,s2))
cout<<"Эти строки равны.";
else cout<<"Эти строки не равны";
 
 
 
cin.get();
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.09.2009, 21:06     strcmp
Посмотрите здесь:

C++ функция strcmp
C++ strcmp()
Баг strcmp C++
C++ strcmp не работает!
функция strcmp C++
C++ Функция strcmp
C++ STRCMP
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
^Tecktonik_KiLLeR
 Аватар для ^Tecktonik_KiLLeR
1145 / 427 / 19
Регистрация: 23.06.2009
Сообщений: 6,156
Завершенные тесты: 1
01.09.2009, 21:12     strcmp #2
Golovastik, у меня все отлично работает....какой компилятор?
Golovastik
 Аватар для Golovastik
11 / 11 / 0
Регистрация: 25.05.2009
Сообщений: 435
01.09.2009, 21:14  [ТС]     strcmp #3
Выдаёт - Эти строки не равны.
Кампилятор называется Visual Studio 2005
^Tecktonik_KiLLeR
 Аватар для ^Tecktonik_KiLLeR
1145 / 427 / 19
Регистрация: 23.06.2009
Сообщений: 6,156
Завершенные тесты: 1
01.09.2009, 21:18     strcmp #4
Golovastik, а что должно еще выдовать?О_о
Golovastik
 Аватар для Golovastik
11 / 11 / 0
Регистрация: 25.05.2009
Сообщений: 435
01.09.2009, 21:24  [ТС]     strcmp #5
Ошибочка: Изменив те 2 строки на эти:

C++
1
2
strcpy(s1, "С++");
strcpy(s2,"С++");
Не выдаёт, эти строки равны
Gravity
 Аватар для Gravity
556 / 550 / 39
Регистрация: 29.01.2009
Сообщений: 1,274
01.09.2009, 21:27     strcmp #6
'C' в обоих случаях латинская?
M128K145
Эксперт C++
 Аватар для M128K145
8276 / 3495 / 142
Регистрация: 03.07.2009
Сообщений: 10,707
01.09.2009, 21:31     strcmp #7
Все работает
strcmp

Gravity, русские
mirso
524 / 342 / 17
Регистрация: 05.04.2009
Сообщений: 709
01.09.2009, 21:39     strcmp #8
Цитата Сообщение от Gravity Посмотреть сообщение
'C' в обоих случаях латинская
а я не знаю какие у меня, но выдает что равны.
C++
1
2
strcpy(s1, "");
strcpy(s2, "");
Причем - длина строк 0 0.
Syltan
181 / 7 / 0
Регистрация: 27.08.2009
Сообщений: 868
01.09.2009, 21:42     strcmp #9
А у меня выдаёт вот так,как у головастика.
Миниатюры
strcmp  
Golovastik
 Аватар для Golovastik
11 / 11 / 0
Регистрация: 25.05.2009
Сообщений: 435
01.09.2009, 21:51  [ТС]     strcmp #10
Может в коде ошибка?

Добавлено через 2 минуты
Странно, а сейчас заработало,что за прикол.
Syltan
181 / 7 / 0
Регистрация: 27.08.2009
Сообщений: 868
01.09.2009, 21:53     strcmp #11
Если убрать восклицательный знак, будет выдавать что не равны, а почему так?
M128K145
Эксперт C++
 Аватар для M128K145
8276 / 3495 / 142
Регистрация: 03.07.2009
Сообщений: 10,707
01.09.2009, 22:04     strcmp #12
потому что в С++ ноль означает false. ! - отрицание, !0 - true. strcmp возвращает 0 когда строки равны. Вот потому там так и получается. Два варианта есть
C++
1
if(!strcmp(s1,s2))
и эквивалентный ему
C++
1
if(strcmp(s1, s2) == 0)
mirso
524 / 342 / 17
Регистрация: 05.04.2009
Сообщений: 709
01.09.2009, 22:04     strcmp #13
сравнивает s1 и s2;
при s1 < s2 ; < 0,
при s1 = s2 ; 0,
при s1 > s2; > 0
Golovastik
 Аватар для Golovastik
11 / 11 / 0
Регистрация: 25.05.2009
Сообщений: 435
01.09.2009, 22:08  [ТС]     strcmp #14
Что интересно, выдает - Эти строки верны, только в случае,если одна строка с другой полностью одинаковые, например vova vova salat salat. Но если,количество символов одинаково ,а слова не одинаковы, тогда - Эти строки не верны, вот как.
Monte-Cristo
 Аватар для Monte-Cristo
2807 / 1372 / 30
Регистрация: 07.03.2009
Сообщений: 4,446
01.09.2009, 22:09     strcmp #15
Цитата Сообщение от Golovastik Посмотреть сообщение
Что интересно, выдает - Эти строки верны, только в случае,если одна строка с другой полностью одинаковые
ну так ты же строки сравниваешь, а не их длину.
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9384 / 5434 / 916
Регистрация: 25.07.2009
Сообщений: 10,428
01.09.2009, 22:13     strcmp #16
Цитата Сообщение от Golovastik Посмотреть сообщение
Вот изучаю С++, тут столкнулся с простой проблеммой, функция strcmp,которая проверяет на равенство 2 строки между собою. Попробывал реализовать, но что-то она не хочет проверять.

C++
1
2
3
4
5
#include <iostream>
#include <cstdio>
using namespace std;
...
}
Вообще-то strcmp в string.h объявлена. Нужно что-то типа #include <cstring> в начале написать.
Golovastik
 Аватар для Golovastik
11 / 11 / 0
Регистрация: 25.05.2009
Сообщений: 435
01.09.2009, 22:31  [ТС]     strcmp #17
Вроде разобрался,всем спасибо.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.09.2009, 22:33     strcmp
Еще ссылки по теме:

strcmp C++
C++ Функция strcmp
C++ strcmp
C++ Не работает strcmp
Strcmp C++

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

Или воспользуйтесь поиском по форуму:
Gravity
 Аватар для Gravity
556 / 550 / 39
Регистрация: 29.01.2009
Сообщений: 1,274
01.09.2009, 22:33     strcmp #18
Цитата Сообщение от Golovastik Посмотреть сообщение
if(strcmp(s1,s2) == 0) cout<<"Не равны строчки";
А пост mirso выше читал? Если равно, то 0 и будет, а у тебя все наоборот.
Yandex
Объявления
01.09.2009, 22:33     strcmp
Ответ Создать тему
Опции темы

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