numbers.c 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <string.h>
  5. #include <malloc.h>
  6. void show(int *arr, int size)
  7. {
  8. for (int i = 0; i < size; i++)
  9. {
  10. printf("%d el - %d\n", i + 1, *arr);
  11. arr++;
  12. }
  13. arr -= size;
  14. }
  15. int *convert(char *str, int *size_i)
  16. {
  17. int size = 1; // размер массива
  18. int *arr = calloc(2, sizeof(int)); // выделяем память
  19. int *head = arr;
  20. char* newstr = calloc(1000, sizeof(char));
  21. strcpy(newstr, str);
  22. char *newLine = strtok(newstr, " "); // делим по пробелу
  23. while (newLine != NULL) // смотрим осталась ли строка
  24. {
  25. arr = realloc(head, (size + 1) * sizeof(int)); // выделяем память
  26. for(int i = 0; i <size; i++)
  27. {
  28. arr++;
  29. }
  30. int el;
  31. while (1) //для дебилов любящих ставить несколько пробелов - коряво работает, можно в принципе и без этого только 37 стрк
  32. {
  33. int f = sscanf(newLine, "%d", &el); // перводим
  34. if (f == 1)
  35. break; // выходим если нашли элемент
  36. newLine = strtok(NULL, " ");
  37. }
  38. *arr = el;
  39. arr++;
  40. size++;
  41. newLine = strtok(NULL, " ");
  42. }
  43. arr -= size;
  44. *size_i = size;
  45. return arr;
  46. }
  47. int main()
  48. {
  49. char *str = calloc(1000, sizeof(char));
  50. gets(str);
  51. int size;
  52. int *arr = convert(str, &size);
  53. show(arr, size);
  54. }