Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Свой strcmp велосипед на Си для PHP

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
dcc0
Отправлено: 30 Мая, 2018 - 20:41:46
Post Id


Участник


Покинул форум
Сообщений всего: 1043
Дата рег-ции: Июль 2014  


Помог: 10 раз(а)




Решил освежить С. Написал такой почти бесполезный велосипед для проверки двух строк, содержащих числа (только) числа.
Два файла, первый функция PHP:
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. /*Данная программа сравнивает две строки, содержащие числа (только).
  4. Возвращает A > B, B < A или A = B, code 1, 2 и 3.
  5. This program compares two strings, which contains numbers (only).
  6. It returns: A > B, B < A or A = B, code 1, 2 and 3.
  7. Если в начале одной из переменных есть нули, то
  8. переменные а и b должны быть в одинарных или двойных кавычках -
  9. Для А=044 и B=44 без кавычек приведет к неверному выводу. Для А='044' и B='44' -
  10. результат должен быть корректным.
  11. */
  12.  
  13.         function numbers_diff($a, $b)  {
  14.         return print_r((`exec ./numbers_diff.o $a $b`));
  15. }
  16. numbers_diff((int)$a, (int)$b);
  17.  
  18. ?>
  19.  

В функции на всякий случай приведение к int переменных.
Функция также корректно обрабатывает знак минус, т.е. можно задать так:
a='-10';
b='2';

Часть на С

CODE (c):
скопировать код в буфер обмена
  1.  
  2. /*
  3. Данная программа сравнивает две строки, содержащие числа (только).
  4. Возвращает A > B, B < A или A = B, code 1, 2 и 3.
  5. Внимание! при сравнениии A = 123, B=0023 - результат будет неверным.
  6. This program compares two strings, which contains numbers (only).
  7. It returns: A > B, B < A or A = B, code 1, 2 and 3.
  8. Attention! A = 123, B=0023 gives incorrect result.
  9.  
  10. */
  11.  
  12. #include <stdio.h>
  13.   /*Функция печати результата*/
  14.   int ret(int r) {
  15.     printf("%d", r);
  16.     return r;
  17.   }
  18.  
  19. int main(int argc, char * argv[]) {
  20.  
  21.   int r = 0;
  22.   /*Переменная с кодом результата
  23.    Проверим ввод аргументов*/
  24.   if (argc != 3) {
  25.     printf("Restart it with two arguments!\n");
  26.     return ret(0);
  27.   }
  28.  
  29.   int i = 0;
  30.   int j = 0;
  31.   /*Проверим знаки*/
  32.   if (argv[1][0] == '-' && argv[2][0] != '-') return ret(2);
  33.   if (argv[2][0] == '-' && argv[1][0] != '-') return ret(1);
  34.  
  35.   //Считаем число символов в аргументах
  36.   while (argv[1][i] != '\0') i++;
  37.   while (argv[2][j] != '\0') j++;
  38.   /*Печатаем, то, кoторое больше, если числа отриц.*/
  39.   if (argv[2][0] == '-' && argv[1][0] == '-') {
  40.     if (j > i) return ret(1);
  41.     if (j < i) return ret(2);
  42.   }
  43.   /*Печатаем, то, кoторое больше, если числа полож.*/
  44.   else {
  45.     if (j > i) return ret(2);
  46.     if (j < i) return ret(1);
  47.   }
  48.   /*Ищем первый больший знак от начала аргументов*/
  49.   i = 0;
  50.   /*Если числа положительные (без знака -минус)*/
  51.   if (argv[2][0] != '-' && argv[1][0] != '-') {
  52.     while (i != j) {
  53.       /*Если A < B и неотрицательные
  54.        Если A > B и неотрицательные*/
  55.       if (argv[1][i] < argv[2][i]) return ret(2);
  56.       if (argv[1][i] > argv[2][i]) return ret(1);
  57.       i++;
  58.     }
  59.   }
  60.   /*Инвертируем*/
  61.   else {
  62.     i = 0;
  63.     while (i != j) {
  64.       if (argv[1][i] < argv[2][i]) return ret(1);
  65.       if (argv[1][i] > argv[2][i]) return ret(2);
  66.       i++;
  67.     }
  68.   }
  69.   /*Аргументы равны*/
  70.   ret(3);
  71.   return r;
  72. }
  73.  
  74.  

(Отредактировано автором: 30 Мая, 2018 - 20:43:18)



-----
Март 2021. Бросил программирование
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на C++ »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB