Advertisement
DanikKUL

Сортировка строк принятых в командной строке по длине и алфавиту

Dec 9th, 2021
251
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.35 KB | None | 0 0
  1. #include <stdio.h>
  2.  
  3. int str_len(char *str){
  4.     int len = 0;
  5.     while(*str++) len++;
  6.     return len;
  7. }
  8. int str_cmp(char *str1, char *str2){
  9.     int len1 = str_len(str1), len2 = str_len(str2);
  10.     if(len1 < len2){
  11.         return 1;
  12.     }else if(len1 > len2){
  13.         return -1;
  14.     }else{
  15.         int i = 0;
  16.         for (; i < len1; ++i) {
  17.             if(str1[i] != str2[i]){
  18.                 break;
  19.             }
  20.         }
  21.         if(i == len1){
  22.             return 0;
  23.         }
  24.         if(str1[i] > str2[i]){
  25.             return -1;
  26.         }
  27.         if(str1[i] < str2[i]){
  28.             return 1;
  29.         }
  30.     }
  31.     return 0;
  32. }
  33.  
  34. //str_cmp: если первая строка меньше второй выход 1 если вторая строка меньше первой то -1 и 0 если они равны
  35.  
  36. int main(int argc, char *argv[]){
  37.     printf("Current strings\n\n");
  38.     for (int i = 1; i < argc; ++i) {
  39.         puts(argv[i]);
  40.     }
  41.     for (int i = 1; i < argc - 1; ++i) {
  42.         for (int j = 1; j < argc - 1; ++j) {
  43.             if(str_cmp(argv[j], argv[j + 1]) == -1){
  44.                 char *tmp = argv[j];
  45.                 argv[j] = argv[j + 1];
  46.                 argv[j + 1] = tmp;
  47.             }
  48.         }
  49.     }
  50.     printf("\n\nFinal strings\n\n");
  51.     for (int i = 1; i < argc; ++i) {
  52.         puts(argv[i]);
  53.     }
  54. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement