/*==================
字符串的处理函数
2013-08-21 By Mei
====================*/
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
// dest 前面count个字符设置为c
void *memset(void *dest, int c, int count)
{
assert(dest != NULL);
char *p = (char *)dest;
while(count--)
{
*p++ = (char)c;
}
return dest;
}
void *memcpy(void *src, void *dest, size_t count)
//从源字符串复制count个字符到目的字符串,不会处理内存重叠区域
{
assert(src!=NULL && dest!=NULL);
char *p = (char*)src;
char *q = (char *)dest;
while(count--)
{
*q++ = *p++;
}
return dest;
}
void *memmove(void *src, void *dest, size_t count)
//与memcpy类似,可以处理字符串内存重叠问题
{
char *p = (char *)src;
char *q = (char *)dest;
if(q<p)
{
while(count--)
*q++ = *p++;
}
else
{
p = src + count;
q = dest + count;
while(count--)
*--q = *--p;
}
return dest;
}
void swap(char *a, char *b)
{
char temp = *a;
*a = *b;
*b = temp;
}
void *strrev(void *src)
//把字符串的所有内容颠倒过来,返回指向颠倒后的字符串指针
{
assert(src!=NULL);
char *begin = (char *)src;
char *end = (char*)src;
while(*end!='\0')
end++;
end--;
while(begin!=end)
{
swap(begin, end);
begin++;
end--;
}
return src;
}
char *strcat(char *dest, const char *src)
//把src加入dest字符串后,必须保证dest有足够的空间来存放src, 并在字符串最后加上‘\0’
{
assert((dest!=NULL) && (src!=NULL));
char *p = dest;
while(*p!='\0')
p++;
while((*p++ = *src++)!='\0');
return dest;
}
char *strncat(char *dest, const char *src, size_t count)
//把src 复制到dest的末尾,并在末尾处添加‘\0’
//dest 必须有足够的空间来容纳这些数据
{
assert((dest)!=NULL && (src!=NULL));
char *p = dest;
while(*p!='\0')
p++;
while(count--)
{
*dest++ = *src++;
if(*src=='\0')
break;
}
}
char *strcpy(char *dest, const char *src)
//不检查目的指针是否越界,需要在目的指针最后加一个‘\0’表示其是一个字符串
{
assert((dest!=NULL)&&(src!=NULL));
char *temp_dest = dest;
const char *test_src = src;
while(*temp_dest++ = *temp_src++);
return dest;
}
//把src复制到dest ,复制数目由count决定,如果遇到'\0'还未到count 把后面的count-n 复制为‘\0’
char *strncpy(char *dest, const char *src, size_t count)
{
assert((dest!=NULL)&&(src!=NULL));
char *p = dest;
while(count--)
{
if(*src=='\0')
*p++ = '\0';
else
*p++=*src++;
}
return dest;
}
int main()
{
char a[] = "abcdefg";
printf("%s\n", a);
char *p = strrev(a);
printf("%s\n", p);
return 0;
}
字符串处理问题
最新推荐文章于 2023-10-30 22:47:05 发布