Делим string на части - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Привет, возникла следующая проблема есть два массива number[10] и command[10], нужно их соединить вместе но чтобы между ними была точка с запятой ';', а потом нужно этот новый массив разделить на две части new_number[10] и new_command[10]. Привожу ниже свой код, буду благодарен за советы как сделать это правильнее и красивее
Листинг программы
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. int main(void)
  5. {
  6. char old_num[10] = "123456";
  7. char old_com[10] = "text";
  8. char buffer[50];
  9. sprintf(buffer, "%s%c%s%c", old_num, ';', old_com, '\0');
  10. char number[10];
  11. char cmd[10];
  12. char *p = strchr(buffer, ';');
  13. memcpy(number, buffer, p - buffer);
  14. number[p - buffer] = '\0';
  15. *(p++);
  16. char *p2 = strchr(p, '\0');
  17. memcpy(cmd, p, p2 - p);
  18. cmd[p2 - p] = '\0';
  19. return 0;
  20. }

Решение задачи: «Делим string на части»

textual
Листинг программы
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. const char* usage = "Module for a big project usage:\n\
  6.    <program> --option [str1, [str2]]\n";
  7.  
  8. #define HELP "--help"
  9. #define CONCAT "--concat"
  10. #define SPLIT "--split"
  11. #define DELIMITER ';'
  12.  
  13. void
  14. help_usage (int need, int have) {
  15.   if (need != have) {
  16.     fprintf(stderr, "%s", usage);
  17.     exit(EXIT_FAILURE);
  18.   }
  19. }
  20.  
  21. void
  22. bad_alloc () {
  23.   fprintf(stderr, "bad memory allocation");
  24.   exit(EXIT_FAILURE);
  25. }
  26.  
  27. int
  28. main (int argc, char** argv)
  29. {
  30.   if (strcmp(argv[1], HELP) == 0) {
  31.     fprintf(stdout, "%s", usage);
  32.     exit(EXIT_SUCCESS);
  33.   }
  34.  
  35.   if (strcmp(argv[1], CONCAT) == 0) {
  36.     help_usage(4, argc);
  37.     {
  38.       char *s = NULL;
  39.       size_t len1 = strlen(argv[2]);
  40.       size_t len2 = strlen(argv[3]);
  41.  
  42.       if ((s = malloc((len1 + len2 + 2) * sizeof(char))) == NULL) {
  43.     bad_alloc();
  44.       }
  45.       memmove(s, argv[2], len1);
  46.       s[len1] = DELIMITER;
  47.       memmove(&s[len1 + 1], argv[3], len2);
  48.       fprintf(stdout, "It's greet good! Result are: %s\n", s);
  49.       free(s);
  50.       exit(EXIT_SUCCESS);
  51.     }
  52.   }
  53.  
  54.   if (strcmp(argv[1], SPLIT) == 0) {
  55.     help_usage(3, argc);
  56.     {
  57.       char *s1 = NULL, *s2 = NULL, *delim = NULL;
  58.       if ((delim = strchr(argv[2], (int)DELIMITER)) == NULL) {
  59.     fprintf(stdout, "No match delimiter %c in %s\n", DELIMITER, argv[2]);
  60.     exit(EXIT_SUCCESS);
  61.       } else {
  62.     size_t len = strlen(argv[2]);
  63.  
  64.     if (((s1 = malloc(delim - &argv[2][0] + 1)) == NULL) ||
  65.         ((s2 = malloc(&argv[2][len] - delim)) == NULL)) {
  66.       bad_alloc();
  67.     }
  68.     memmove(s1, argv[2], delim - &argv[2][0]);
  69.     s1[delim - &argv[2][0]] = '\0';
  70.     memmove(s2, delim + 1, &argv[2][len] - delim);
  71.     s2[&argv[2][len] - delim] = '\0';
  72.     fprintf(stdout, "%s\n%s\n", s1, s2);
  73.     free(s1);
  74.     free(s2);
  75.     exit(EXIT_SUCCESS);
  76.       }
  77.     }
  78.   }
  79.   exit(EXIT_FAILURE);
  80. }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 3.909 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы