strchr函数
函数功能:查找一个字符。在一个字符串中查找一个特定的字符。
函数原型:char *strchr(char const *str,int ch);
函数说明:strchr在字符串str中查找字符ch第一次出现的位置,找到后返回一个指向该位置的指针。如果该字符不存在于字符串中,则返回一个NULL指针。注意:第二个参数是一个整型值,但是,它包含了一个字符串值。
#include <stdio.h>
#include <windows.h>
char *mystrchr(char *s, char c)
{
char*p = s;
while (*s && *s != c)
s++;
if (*s == c)
return s;
return NULL;
}
int main()
{
char buf[20] = "hellowrold!";
char c = 'l';
char *p = mystrchr(buf, c);
printf("%s\n", p);
systme("pause");
return 0;
}
strstr函数
函数功能:在一个字符串中查找一个字串
函数原型:char *strstr(char const *s1,char const *s2);
函数说明:strstr实现在s1中查找整个s2第一次出现的位置,并返回一个指向该位置的指针。如果s2并没有完整的出现在s1的任何地方,函数返回一个NULL指针。如果第二个字符串是一个空字符串,函数返回s1。
#include <stdio.h>
#include <windows.h>
char *mystrstr(char *s1, char *s2)
{
char *pChar;
pChar = s2;
int len = strlen(s2);
for (; strchr(s1, *pChar) != '\0'; s1++)
{
if (strncmp(s1, pChar, len) == 0)
{
return s1;
}
}
return NULL;
}
int main()
{
char str1[20] = "abcdhello!";
char str2[20] = "cd";
char *p = mystrstr(str1, str2);
printf("%s\n", p);
systme("pause");
return 0;
}strcat
strcat函数
函数功能:将src指向的字符串追加到dest指向字符串的后面。
函数原型: char *strcat(char *strDest, const char *strSrc)
函数说明:返回dest字符串的地址。
#include <stdio.h>
#include <STDLIB.H>
#include <STRING.H>
char * my_strcat(char * dest,const char *src)
{
char *p=dest;
while(*p) p++; //让指针P指向dest的最后面
while(*src)
{
*p=*src;
p++;
src++;
}
*p='\0'; //新字符串的终止符
return dest;
}
void main()
{
char s[10]="andef";
char *c="ghi";
my_strcat(s,c);
puts(s);
}
strcpy函数
功能:字符串拷贝。将src指向的字符串拷贝到dest,字符串以'\0'结束。
原型:char *strcpy(char *dst, const char *src)。
说明:返回char *
char * strcpy(char *dst, const char *src) //源字符串参数用const修饰,防止修改源字符串
{
assert(dst != NULL && src != NULL); //空指针检查
char *ret = dst; //返回目标地址
while ((*dst++ = *src++) != '\0');
return ret;
}
strcmp函数
功能:它对两个字符串进行比较,然后返回比较结果。
原型:int strcmp(const char* str1, const char* str2)
说明:其中str1和str2可以是字符串常量或者字符串变量,返回值为整形。返回结果如下规定: str1小于str2,返回负值或者-1(VC返回-1);str1等于str2,返回0;str1大于str2,返回正值或者1(VC返回1);
int strcmp(const char* str1, const char* str2)
{
int ret = 0;
while(!(ret=*(unsigned char*)str1-*(unsigned char*)str2) && *str1)
{
str1++;
str2++
}
if (ret < 0)
{
return -1;
}
else if (ret > 0)
{
return 1;
}
return 0;
}
memcpy函数
原型:void * memcpy ( void * destination, const void * source, size_t num );
功能:拷贝n个字节
说明:返回指向dest的指针
void * mymemcpy(void *dest, const void *src, size_t count)
{
if (dest == NULL || src == NULL)
return NULL;
char *pdest = static_cast <char*>(dest);
const char *psrc = static_cast <const char*>(psrc);
int n = count;
if (pdest > psrc && pdest < psrc+count)
{
for (size_t i=n-1; i != -1; --i)
{
pdest[i] = psrc[i];
}
}
else
{
for (size_t i= 0; i < n; i++)
{
pdest[i] = psrc[i];
}
}
return dest;
}
memmove函数
功能:由src所指内存区域复制count个字节到dest所指内存区域
原型:void *memmove( void* dest, const void* src, size_tcount );
说明:返回指向dest的指针
void* memcpy(void* memTo, void* memFrom, size_t size)
{
assert(memTo != NULL && memFrom != NULL);
char* temFrom = (char*)memFrom;
char* temTo = (char*)memTo;
while(size-- > 0)
*temTo++ = *temFrom++;
return memTo;
}
拷贝n个字节