fork download
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3.  
  4. int main()
  5. {
  6. const char* s = " 100 101010 11 1010 010 ";
  7. printf("Дана строка: %s\n", s);
  8.  
  9. const char *shortest_start = NULL, *longest_start = NULL, *current_start = NULL;
  10. size_t shortest_len, longest_len;
  11. char* sum_str = NULL;
  12.  
  13. for (const char *sp = s; ; sp++)
  14. switch (*sp)
  15. {
  16. case '\0': case ' ':
  17. if (current_start)
  18. {
  19. size_t current_len = sp - current_start;
  20. if (!shortest_start || current_len < shortest_len)
  21. {
  22. shortest_start = current_start;
  23. shortest_len = current_len;
  24. }
  25. if (!longest_start || current_len > longest_len)
  26. {
  27. longest_start = current_start;
  28. longest_len = current_len;
  29. }
  30. current_start = NULL;
  31. }
  32. if (!*sp) goto exit_loop;
  33. break;
  34.  
  35. case '0': case '1':
  36. if (!current_start) current_start = sp;
  37. break;
  38.  
  39. default:
  40. printf("Неожиданный символ %c (#%i).", *sp, (unsigned char)*sp);
  41. goto finally;
  42. }
  43. exit_loop:
  44.  
  45. if (!shortest_start || !longest_start)
  46. {
  47. printf("Слов нет.");
  48. goto finally;
  49. }
  50.  
  51. printf("Самое длинное слово: %.*s\n", (int)longest_len, longest_start);
  52. printf("Самое короткое слово: %.*s\n", (int)shortest_len, shortest_start);
  53.  
  54. sum_str = (char*)malloc(longest_len + 1);
  55. sum_str[longest_len] = '\0';
  56. for (size_t idigit = 0; idigit < longest_len; idigit++)
  57. {
  58. int digit = longest_start[longest_len - 1 - idigit] - '0';
  59. if (idigit < shortest_len) digit += shortest_start[shortest_len - 1 - idigit] - '0';
  60. sum_str[longest_len - 1 - idigit] = '0' + digit;
  61. }
  62.  
  63. printf("Сумма чисел: %s\n", sum_str);
  64.  
  65. finally:
  66. free(sum_str);
  67. return 0;
  68. }
Success #stdin #stdout 0s 4860KB
stdin
Standard input is empty
stdout
Дана строка:   100 101010  11 1010 010 
Самое длинное слово: 101010
Самое короткое слово: 11
Сумма чисел: 101021