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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.11.2012, 12:31   #11
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,331
По умолчанию

Ужасный код
1) Зачем вообще превращать в цифры?
2) Зачем делать превращения через switch/case?
3) Зачем вызывать translate дважды? Лучше вычесть второй из первого и смотреть на знак результата.
waleri вне форума Ответить с цитированием
Старый 27.11.2012, 12:59   #12
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Если забить на незначащие нули вначале числа, а так же предположить, что в строках действительно записаны положительные числа, то:
Код:
// 0 - если числа равны
// < 0 - если второе число больше первого
// > 0 - если первое число больше второго
int compare(const char *val1, const char *val2)
{
  int len1 = strlen(val1);
  int len2 = strlen(val2);

  if (len1 != len2)
    return len1 - len2;

  for (int i = 0; val1[i] == val2[i] && i < len1; ++i);

  return val1[i] - val2[i];
}
Писалось здесь, не тестировалось, поэтому возможны ошибки.
pu4koff вне форума Ответить с цитированием
Старый 27.11.2012, 14:39   #13
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,331
По умолчанию

Код:
// 0 - если числа равны
// < 0 - если второе число больше первого
// > 0 - если первое число больше второго
int compare(const char *val1, const char *val2)
{
  int len1 = strlen(val1);
  int len2 = strlen(val2);

  if (len1 != len2)
    return len1 - len2;

  return strcmp(val1, val2);
}
waleri вне форума Ответить с цитированием
Старый 27.11.2012, 14:40   #14
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Чорт. Действительно ведь можно эту функцию задействовать. Результат в compare главное под неё делал...
pu4koff вне форума Ответить с цитированием
Старый 27.11.2012, 15:53   #15
masax
Форумчанин
 
Регистрация: 01.10.2008
Сообщений: 248
По умолчанию

можно проще переводить цифру в число (если нужно):
Код:
if (c >= '0' && c <= '9')
  a = (int)c - 48;
Контакты
skype, почта: bm@kwax.ru
masax вне форума Ответить с цитированием
Старый 27.11.2012, 18:48   #16
Granus
С++
Форумчанин
 
Аватар для Granus
 
Регистрация: 22.09.2008
Сообщений: 791
По умолчанию

Код:
a = (int)c - 48;
А лучше
Код:
a = c - '0';
Так интуитивнее и понятнее, что происходит, а приведение типов и само сработает.
Форматируйте код, будьте людьми.
Granus вне форума Ответить с цитированием
Старый 27.11.2012, 21:55   #17
Blind Guard
Форумчанин
 
Регистрация: 14.03.2012
Сообщений: 139
По умолчанию

Цитата:
Сообщение от waleri Посмотреть сообщение
Ужасный код
1) Зачем вообще превращать в цифры?
2) Зачем делать превращения через switch/case?
3) Зачем вызывать translate дважды? Лучше вычесть второй из первого и смотреть на знак результата.
Думаю если бы вы не знали про strcmp, то делали бы точно также.
P.S. Я не знал про strcmp, но помог чем смог.
Blind Guard вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Запись большого фрагмента текста в таблицу БД Esigns SQL, базы данных 4 22.07.2012 22:49
Факториал большого числа Аруми Помощь студентам 2 08.11.2011 14:48
Перевод в строку большого числа RIO Общие вопросы C/C++ 0 23.05.2010 23:51
Запись в один файл большого количества информации pregmatch Общие вопросы C/C++ 5 09.03.2009 14:09
Запись большого файла на 2-ва DVD Rembo Софт 32 14.02.2009 16:02