- 字符数组的输入和输出
scanf printf gets puts fgets fputs //此处不赘述
//递归和非递归分别实现strlen
int MyStrlen1(const char *str)//计数器
{
assert(str);
int count = 0;
while (*str)
{
str++;
count++;
}
return count;
}
int MyStrlen2(const char *str)//递归
{
assert(str);
if (*str=='\0')
return 0;
else
return 1 + MyStrlen(str + 1);
}
int MyStrlen3(const char *str)//指针相减代表所隔元素
{
const char *p = str;
while (*p)
{
p++;
}
return p - str;
}
-
字符串复制函数:
char *strcpy( char *strDestination, const char *strSource );//返回值为char*目的为 链式调用(支持链式表达式)
char *strncpy( char *strDest, const char *strSource, size_t count );
strcpy函数的实现
//1.参数顺序
//2.函数的功能,停止条件
//3.assert
//4.const修饰指针
//5.函数返回值
char *my_strcpy(char *dest, const char*src)
{
char *ret = dest;
assert(dest != NULL);
assert(src != NULL);
while((*dest++ = *src++))
{
;
}
return ret;
}
strncpy的实现
char *my_strcat(char *dest, const char*src)
{
assert(dest);
if (src == NULL)
{
return dest;
}
char*p = dest;
while (*dest)
{
dest++;
}//代码走到这里说明dest此时指向/0的位置
while (*src)
{
*dest = *src;
dest++;
src++;
}//代码走到这里说明此时src指向/0的位置
return p;//返回char*类型指针p目的--链式调用
}
char *my_strcat(char *dest, const char*src)//上代码还可改进一下
{
assert(dest);
if (src == NULL)
return dest;
char*p = dest;
while(*dest++!='\0');//dest多加了一步
dest--;
while(*dest++=*src++);两个指针多加一步,但对结果无影响
return p;
}
char *strncpy( char *strDest, const char *strSource, size_t count );
功能: 用来比较两个字符串
参数: s1、s2为两个进行比较的字符串
返回值: 若s1、s2字符串相等,则返回零;若s1大于s2,则返回大于零的数;否则,则返回小于零的数。
说明: strcmp()函数是根据ACSII码的值来比较两个字符串的;strcmp()函数首先将s1字符串的第一个字符值减去s2第一个字符,若差值为零则继续比较下去;若差值不为零,则返回差值。 直到出现不同的字符或遇’\0’为止。
特别注意: strcmp(const char *s1,const char * s2)这里面只能比较字符串,不能比较数字等其他形式的参数。
int my_strcmp(const char* str1, const char* str2)
{ assert(str1);
assert(str2);
while (*str1 == *str2)
{ if (*str1 == '\0')
{
return 0;
}
str1++;
str2++;
}
//比较
if (*str1 > *str2)
{
return 1;
}
else
{
return -1;
}
}
- strstr
char *strstr( const char *string, const char *strCharSet );
char * mystrstr(char* str1,char* str2)
{
char *start =str1;
assert(str1);
assert(str2);
while (*start != '\0')
{
char* s1 = start;
char* s2 = str2;
while (*s1&&*s2&&*s1 == *s2)
{
s1++;
s2++;
}
if (*s2 == '\0')
{
return start;
}
start++;//satrt 不等于0且s1!=s2;
}
return NULL;//到这里说明主串走完还没找到,返回NULL
}