常用库函数编程实现用法总结(三) strchr strrev memset strtod

来源:互联网 发布:空军知乎 编辑:程序博客网 时间:2024/06/01 09:15
/******************************************************************************
函数原型:extern char *strchr(char *str,char character)
参数说明:str为一个字符串的指针,character为一个待查找字符。
所在库名:#include <string.h>
函数功能:从字符串str中寻找字符character第一次出现的位置。
返回说明:返回指向第一次出现字符character位置的指针,如果没找到则返回NULL。
The strchr() and strrchr() functions return a pointer to the matched character or NULL
if the character is not found.
*******************************************************************************/
char *mystrchr(const char * str, int ch)
{
    assert(str != NULL);
    for( ; *str != (char)ch; str++)
        if(*str == '\0')
            return NULL;
    return (char *)str;
}
int main()
{
    char str[] = "This is a sample string";
    char *pch = strchr(str,'s');
    printf("The first occurence of 's' found at : %d",pch - str + 1);
    return 0;
}


/*************************************************************
原型:extern char *strrev(char *s);
用法:#include <string.h>
功能:把字符串s的所有字符的顺序颠倒过来(不包括空字符NULL)。
说明:返回指向颠倒顺序后的字符串指针。
Reverses the order of characters in the string.
The terminating null character remains in place.
把字符串的所有字符的顺序颠倒过来(不包括空字符NULL)。
返回指向颠倒顺序后的字符串指针。
**************************************************************/
char * my_strrev(char *str)
{
    char *right = str;
    char *left = str;
    char ch;
    while (*right) right++;
    right--;
    while (left < right)
    {
        ch = *left;
        *left++ = *right;
        *right-- = ch;
    }
    return(str);
}


/*****************************************************************
原型:extern void *memset(void *buffer, int c, int count);
功能:把buffer所指内存区域的前count个字节设置成字符c。
包含头文件:<string.h>
注意这个函数是字符串函数,所以一定要包含字符串头文件。
Sets the first "count" bytes of the memory starting at "dst" to the character value "val".
把dst所指内存区域的前count个字节设置为val。返回指向dst的指针。
********************************************************************/
void * my_memset(void *dst,int val,int count)
{
    void *p = dst;
    while (count--)
    {
        *(char *)dst = (char)val;
        dst = (char *)dst + 1;
    }
    return p;
}
void *memset(void *src, int c, size_t count)
{
    assert(src!=NULL);
    char *tmpsrc=(char*)src;
    while(count--)
        *tmpsrc++ =(char)c;
    return src;
}


/**************************************************************************
strtod(将字符串转换成浮点数)
相关函数 atoi,atol,strtod,strtol,strtoul
表头文件 #include<stdlib.h>
定义函数 double strtod(const char *nptr,char **endptr);
函数说明 strtod()会扫描参数nptr字符串,跳过前面的空格字符,直到遇上
数字或正负符号才开始做转换,到出现非数字或字符串结束时
('\0')才结束转换,并将结果返回。若endptr不为NULL,则会将遇
到不合条件而终止的nptr中的字符指针由endptr传回。参数nptr字
符串可包含正负号、小数点或E(e)来表示指数部分。如123.456或123e-2。
返回值 返回转换后的浮点型数。
/*将字符串a,b,c 分别采用10,2,16 进制转换成数字*/
#include<stdlib.h>
int main()
{
    char a[]=”1000000000”;
    char b[]=”1000000000”;
    char c[]=”ffff”;
    printf(“a=%d\n”,strtod(a,NULL,10));
    printf(“b=%d\n”,strtod(b,NULL,2));
    printf(“c=%d\n”,strtod(c,NULL,16));
}
/**********************
a=1000000000
b=512
c=65535
***********************/