Написать свои функции работы со строками аналогичные функциям из - C (СИ)
Формулировка задачи:
надо было написать свои функции работы со строками аналогичные функциям из <string.h>
проверьте, пожалуйста:
какие есть ошибки, замечания?
не разобрался с функцией strtok(), чет не получилось даже просто использовать её..
#include <stdio.h>
size_t mstrlen(const char *str)
{
size_t res = 0;
while(*str++)
res++;
return res;
}
char * mstrset(char *str, int c)
{
char *res = str;
while(*str) *str++ = c;
*str = '\0';
return res;
}
char * mstrnset(char *str, int c, unsigned int n)
{
size_t i;
char *res = str;
if (n > mstrlen(str)) n = mstrlen(str);
for(i = 0; i < n; i++)
*str++ = c;
return res;
}
char * mstrcpy(char *dst, const char *src)
{
char *res = dst;
while(*src) *dst++ = *src++;
*dst = '\0';
return res;
}
char * mstrcat(char *str1, const char *str2)
{
char *res = str1;
while(*++str1);
while(*str2) *str1++ = *str2++;
*str1 = '\0';
return res;
}
int mstrcmp(const char *str1, const char *str2)
{
while(*str1 && *str2)
{
if (*str1 != *str2)
{
if (*str1 > *str2)
return 1;
else
return -1;
}
*str1++;
*str2++;
}
return 0;
}
const char * mstrchr(const char *str, int ch)
{
while(*str)
if (*++str == ch) return str;
return NULL;
}
const char * mstrpbrk(const char *str1, const char *str2)
{
const char *res = str1, *rest , *t;
size_t i;
while(*++res);
rest = res;
for(i = 0; i < mstrlen(str2); i++)
{
t = mstrchr(str1, str2[i]);
if (t && t <= res) res = t;
}
if (res != rest)
return res;
else
return NULL;
}
size_t mstrspn(const char *str1, const char *str2)
{
size_t i, j, f;
for(i = 0; i < mstrlen(str1); i++)
{
f = 0;
for(j = 0; j < mstrlen(str2); j++)
{
if (str1[i] != str2[j]) f++;
}
if (f == mstrlen(str2)) return i;
}
return mstrlen(str1);
}
const char * mstrstr(const char *str1, const char *str2)
{
size_t i, j, f;
for(i = 0; i < mstrlen(str1) - mstrlen(str2) + 1; i++)
{
f = 0;
for(j = 0; j < mstrlen(str2); j++)
{
if (str1[i + j] == str2[j]) f++;
}
if (f == mstrlen(str2)) return str1 + i;
}
if (mstrlen(str2))
return NULL;
else
return str1;
}
int main(void)
{
char str1[20]="abc";
printf("%s", mstrcat(str1, "12345"));
getchar();
return 0;
} Решение задачи: «Написать свои функции работы со строками аналогичные функциям из »
textual
Листинг программы
#include <stdio.h>
#include <string.h>
int main(void)
{
char line[100] = "abcd";
strset(line, 'c');
return 0;
}
Объяснение кода листинга программы
- Включаем необходимые заголовочные файлы
- Объявляем переменную типа char с именем line и размером 100 байт
- Инициализируем переменную line строкой
abcd - Вызываем функцию strset для установки всех символов в строке на символ 'c'
- Возвращаем 0, чтобы указать, что программа успешно завершилась