Написать свои функции работы со строками аналогичные функциям из - C (СИ)

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

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

надо было написать свои функции работы со строками аналогичные функциям из <string.h> проверьте, пожалуйста:
Листинг программы
  1. #include <stdio.h>
  2. size_t mstrlen(const char *str)
  3. {
  4. size_t res = 0;
  5. while(*str++)
  6. res++;
  7. return res;
  8. }
  9. char * mstrset(char *str, int c)
  10. {
  11. char *res = str;
  12. while(*str) *str++ = c;
  13. *str = '\0';
  14. return res;
  15. }
  16. char * mstrnset(char *str, int c, unsigned int n)
  17. {
  18. size_t i;
  19. char *res = str;
  20. if (n > mstrlen(str)) n = mstrlen(str);
  21. for(i = 0; i < n; i++)
  22. *str++ = c;
  23. return res;
  24. }
  25. char * mstrcpy(char *dst, const char *src)
  26. {
  27. char *res = dst;
  28. while(*src) *dst++ = *src++;
  29. *dst = '\0';
  30. return res;
  31. }
  32. char * mstrcat(char *str1, const char *str2)
  33. {
  34. char *res = str1;
  35. while(*++str1);
  36. while(*str2) *str1++ = *str2++;
  37. *str1 = '\0';
  38. return res;
  39. }
  40. int mstrcmp(const char *str1, const char *str2)
  41. {
  42. while(*str1 && *str2)
  43. {
  44. if (*str1 != *str2)
  45. {
  46. if (*str1 > *str2)
  47. return 1;
  48. else
  49. return -1;
  50. }
  51. *str1++;
  52. *str2++;
  53. }
  54. return 0;
  55. }
  56. const char * mstrchr(const char *str, int ch)
  57. {
  58. while(*str)
  59. if (*++str == ch) return str;
  60. return NULL;
  61. }
  62. const char * mstrpbrk(const char *str1, const char *str2)
  63. {
  64. const char *res = str1, *rest , *t;
  65. size_t i;
  66. while(*++res);
  67. rest = res;
  68. for(i = 0; i < mstrlen(str2); i++)
  69. {
  70. t = mstrchr(str1, str2[i]);
  71. if (t && t <= res) res = t;
  72. }
  73. if (res != rest)
  74. return res;
  75. else
  76. return NULL;
  77. }
  78. size_t mstrspn(const char *str1, const char *str2)
  79. {
  80. size_t i, j, f;
  81. for(i = 0; i < mstrlen(str1); i++)
  82. {
  83. f = 0;
  84. for(j = 0; j < mstrlen(str2); j++)
  85. {
  86. if (str1[i] != str2[j]) f++;
  87. }
  88. if (f == mstrlen(str2)) return i;
  89. }
  90. return mstrlen(str1);
  91. }
  92. const char * mstrstr(const char *str1, const char *str2)
  93. {
  94. size_t i, j, f;
  95. for(i = 0; i < mstrlen(str1) - mstrlen(str2) + 1; i++)
  96. {
  97. f = 0;
  98. for(j = 0; j < mstrlen(str2); j++)
  99. {
  100. if (str1[i + j] == str2[j]) f++;
  101. }
  102. if (f == mstrlen(str2)) return str1 + i;
  103. }
  104. if (mstrlen(str2))
  105. return NULL;
  106. else
  107. return str1;
  108. }
  109. int main(void)
  110. {
  111. char str1[20]="abc";
  112. printf("%s", mstrcat(str1, "12345"));
  113. getchar();
  114. return 0;
  115. }
какие есть ошибки, замечания? не разобрался с функцией strtok(), чет не получилось даже просто использовать её..

Решение задачи: «Написать свои функции работы со строками аналогичные функциям из »

textual
Листинг программы
  1. #include <stdio.h>
  2. #include <string.h>
  3.  
  4. int main(void)
  5. {
  6.     char line[100] = "abcd";
  7.  
  8.     strset(line, 'c');
  9.     return 0;
  10. }

Объяснение кода листинга программы

  1. Включаем необходимые заголовочные файлы
  2. Объявляем переменную типа char с именем line и размером 100 байт
  3. Инициализируем переменную line строкой abcd
  4. Вызываем функцию strset для установки всех символов в строке на символ 'c'
  5. Возвращаем 0, чтобы указать, что программа успешно завершилась

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


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

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

13   голосов , оценка 4.462 из 5

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

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

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