Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.11.2011, 22:38   #1
bot.bat
 
Регистрация: 04.11.2011
Сообщений: 8
По умолчанию Функция strcmp

Объясните пожалуйста, где я ошибся, потому что выводит только (если строки разные), "-1" или "1", хотя функция должна выводить разность кодов.
Код:
#include <conio.h>
#include <string.h>
#include <stdio.h>

void main()
{
	int pr;
	char str1[81], str2[81];
	puts("Enter 2 strings:");
	gets(str1);
	gets(str2);
	if(strlen(str1) + strlen(str2) < 81)
	  {  puts("Result:");
	     pr=strcmp(str1,str2);
		 if(pr)
			 printf("Difference codes = %d\n",pr);
		 else
			 puts("Same strings\n");
	  }
	else
		printf("Not enough memory\n");
	getch();
	return;
}
bot.bat вне форума Ответить с цитированием
Старый 22.11.2011, 05:22   #2
XemyL
Пользователь
 
Регистрация: 24.04.2011
Сообщений: 30
По умолчанию

а с каких пор strcmp возвращает разность кодов (даже не представляю какую)?
она возвращает значение меньше 0, больше 0 или 0 в зависимости от символов строк
XemyL вне форума Ответить с цитированием
Старый 22.11.2011, 10:58   #3
bot.bat
 
Регистрация: 04.11.2011
Сообщений: 8
По умолчанию

Цитата:
Сообщение от XemyL Посмотреть сообщение
а с каких пор strcmp возвращает разность кодов (даже не представляю какую)?
Разность кодов двух первых не совпадающих символов (ASCII код видимо). То есть как я понимаю если например в первой строке есть символ '1', а во второй не совпадающий с ним '5', то результат должен быть -5 (48-53)

В методичке такое задание
bot.bat вне форума Ответить с цитированием
Старый 22.11.2011, 11:00   #4
Zer0
Форумчанин
 
Аватар для Zer0
 
Регистрация: 13.12.2007
Сообщений: 788
По умолчанию

http://www.cplusplus.com/reference/c...string/strcmp/

а разницу кодов можно посчитать просто - вычесть из одного символа другой, т.к. в c++ символы хранятся как однобайтовое целочисленное значение
благодарность - сюда (не забываем писать от кого)
Zer0 вне форума Ответить с цитированием
Старый 22.11.2011, 11:29   #5
bot.bat
 
Регистрация: 04.11.2011
Сообщений: 8
По умолчанию

Цитата:
Сообщение от Zer0 Посмотреть сообщение
а разницу кодов можно посчитать просто - вычесть из одного символа другой, т.к. в c++ символы хранятся как однобайтовое целочисленное значение
Дело в том, что разность кодов нужно посчитать именно с использованием этой функции (strcmp)

P.S. вот тут, на 109 странице тык

Последний раз редактировалось bot.bat; 22.11.2011 в 11:39.
bot.bat вне форума Ответить с цитированием
Старый 22.11.2011, 11:43   #6
Zer0
Форумчанин
 
Аватар для Zer0
 
Регистрация: 13.12.2007
Сообщений: 788
По умолчанию

написано четко - разницу кодов ПЕРВЫХ ДВУХ несовпавших символов
То есть суть сводится или к тому, чтобы удалять часть строки и проверять снова, либо брать по одному символу и применять к ним эту функцию
благодарность - сюда (не забываем писать от кого)
Zer0 вне форума Ответить с цитированием
Старый 22.11.2011, 11:53   #7
bot.bat
 
Регистрация: 04.11.2011
Сообщений: 8
По умолчанию

Цитата:
Сообщение от Zer0 Посмотреть сообщение
написано четко - разницу кодов ПЕРВЫХ ДВУХ несовпавших символов
То есть суть сводится или к тому, чтобы удалять часть строки и проверять снова, либо брать по одному символу и применять к ним эту функцию
Не понял, о чем вы. Функция априори выводит разность кодов двух первых не совпадающих символов. Не знаю почему, но в Turbo C 3.0 программа работает как должна, а в Visual Studio'10 (в котором я писал изначально) только '-1', '0' и '1'. Вопрос себя исчерпал, всем спасибо.
bot.bat вне форума Ответить с цитированием
Старый 22.11.2011, 15:20   #8
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Цитата:
а в Visual Studio'10 (в котором я писал изначально) только '-1', '0' и '1'.
Потому что так требует стандарт.
p51x вне форума Ответить с цитированием
Старый 22.11.2011, 21:56   #9
Somebody
Участник клуба
 
Регистрация: 08.10.2007
Сообщений: 1,185
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
Потому что так требует стандарт.
Стандарт требует только больше нуля, ноль, меньше нуля.
Somebody вне форума Ответить с цитированием
Старый 22.11.2011, 22:12   #10
XemyL
Пользователь
 
Регистрация: 24.04.2011
Сообщений: 30
По умолчанию

Цитата:
Сообщение от bot.bat Посмотреть сообщение
Функция априори выводит разность кодов двух первых не совпадающих символов. Не знаю почему, но в Turbo C 3.0 программа работает как должна
Борланд, тот же Турбо имеет много своих приколов, которые увидиш только там. Стандарт, как было сказано говорит только о 0 или <0 или >0. А создатели компилятора добавили свои, "авторские" моменты.

Последний раз редактировалось XemyL; 22.11.2011 в 22:14.
XemyL вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Функция Александр1993 Помощь студентам 30 06.06.2011 17:36
Функция strcmp() ts-alan Общие вопросы C/C++ 4 04.09.2010 23:00
strlen,strcpy,strcmp(Visual C++) crit Visual C++ 14 09.04.2009 19:10
Функция Sam04 Помощь студентам 1 11.09.2008 13:51
одна функция потока, а другая функция - член класса запускающего этот поток Дмитрий_Ч Общие вопросы C/C++ 2 27.09.2007 08:50