1、strcat()

此函数原型为 char *strcat(char *dest, const char *src).
功能为连接两个字符串,把src连接到dest后面;返回dest地址
实现如下
char *my_strcat(char *strDest,const char *strSrc) //将源字符串加const,表明其为输入参数
{
    char *addrStr=strDest;

    assert(strDest!=NULL && strSrc!=NULL); //对源地址和目的地址加非0断言
    //若使用while(*strDest++),则会出错,指向'\0'之后,会出现strDest++,则指向了个'\0'的下一个位置,
    while(*strDest !='\0')
    {
        strDest++; //循环体内的++可以使指向字符串结束标志'\0'
    }
    while((*strDest++ = *strSrc++)!='\0');

    return addrStr;
}

  效果:

    str1[10]="hello";

    str2[10]=" world";

    strcat(str1,str2);

    printf("%s\n",str1);  //显示:    hello world         sizeof(str1)==12

2、strcmp()

此函数的函数原型为 int strcmp(const char *str1, const char *str2).
功能为比较两个字符串。
当str1指向的字符串大于str2指向的字符串时,返回正数。
当str1指向的字符串等于str2指向的字符串时,返回0。
当str1指向的字符串小于str2指向的字符串时,返回负数。
实现如下:
int my_strcmp(const char *str1,const char *str2)
{
    /*不可用while(*str1++==*str2++)来比较,当不相等时仍会执行一次++,
    return返回的比较值实际上是下一个字符。应将++放到循环体中进行。*/
    while(*str1 == *str2)
    {
        if(*str1 == '\0')
            return 0;

		str1++;
		str2++;
    }
    return *str1 - *str2;
}

效果: 

   printf("%d\n",my_strcmp("aaaa","aaa1"));  //返回正数

   printf("%d\n",my_strcmp("aaaa","aaaa"));  //返回0

   printf("%d\n",my_strcmp("baaa","akkkkkkk"));  //注意:这里返回正数  [只比较首次2个不相同的字符大小]

   printf("%d\n",my_strcmp("akkkkkkk","faaa"));  //注意:这里返回负数   [只比较首次2个不相同的字符大小]  

3、strcpy()

此函数原型为 char *strcpy(char* dest, const char *src)
功能为拷贝字符串内容到目的串,把src所指向的内容拷贝到dest
实现如下
char *my_strcpy(char *strDest,const char *strSrc)
{
    char *addrStr = strDest;

    assert((strDest!=NULL) && (strSrc!=NULL)); //对源地址和目的地址加非0断言
    while((*strDest++ = *strSrc) != '\0');

    return addrStr;
}

  效果: 

    str1[10]="1234";

    str2[10]=" ab";

    printf("%s\n",strcpy(str1,str2));  //显示: ab   (而不是ab34)

4、strlen()

此函数原型为unsigned in strlen(const char *str)

功能为返回字符串str的长度(不包括'\0')。

实现如下:

//自己编写的strlen函数
int my_strlen(const char  *str)
{
  int length=0;

  while(*str!='\0')
  {
    str++;
    length++;
  }

  return(length);
}

  效果: 

    printf("%d\n",sizeof("ab"));  //显示: 3     

    printf("%d\n",my_strlen("ab"));  //显示: 2

  

5、strchr()  strrchr()

char *strchr(char *str, char c)

功能为查找str中首次出现c的位置(指针),如有有,则返回出现位置,否则返回NULL。实现如下:

char *my_strchr(char *str,const char c)
{
	while (*str!=c && str!='\0')
	{
		str++;
	}

	return ((*str==c)?str:NULL);
}

  效果:

    char arr1[3]="ab";  

    printf("%p\n",arr1);  //显示: 0xbfc8b5c4
    printf("%p\n",my_strchr(arr1,'b'));  //显示: 0xbfc8b5c5

    

char *strrchr(char *str, char c)

功能为查找str中最后一次出现c的位置,如有有,则返回出现位置,否则返回NULL。实现如下:

char  *my_strrchr(char  *str,char c)
{
  char  *p = str + strlen(str); //p指向字符串最后一个字符'\0'

  while(*p!=c && p!=str)
  {
    p--;
  }

  return(*p==c?p:NULL);
} 

  效果:

    char arr1[3]="abb";  

    printf("%p\n",arr1);  //显示: 0xbfc8b5c4
    printf("%p\n",my_strrchr(arr1,'b'));  //显示: 0xbfc8b5c5

    printf("%p\n",my_strrchr(arr1,'c'));  //显示: NULL

6、strcspn()  strspn()

strcspn

原型:size_t strcspn(const char *pstr, const char *strCharset)

MSDN解释为:在字符串pstr中搜寻strCharsret中所出现的字符,返回strCharset中出现的第一个字符在pstr中的出现位置。简单的说,若strcspn返回的数值为n,则代表字符串strCharsrt开头连续有n个字符不包含在pstr内的字符。

实现十分巧妙,在http://blog.csdn.net/chenyu2202863/article/details/5293941

原型size_t strspn(const char *pstr, const char *strCharset)

功能:返回后面字符串中第一个不在前者出现的下表。

7、strdup()

此函数原型为char *strdup(const char *str)
功能为: strdup()会先用maolloc()配置与参数str 字符串相同的空间大小,然后将参数str 字符串的内容复制到该内存地址,然后把该地址返回。若失败,返回NULL。要注意,返回的指针指向的内存在堆中,所以要手动释放。
函数实现
char *strdup(const char *str)
{
    char *p=NULL;
    if(str&&(p=(char*)malloc(strlen(str)+1)))
        strcpy(p,str);
    return p;
}

  效果:

   char a[] = "strdup";

   char *b;

   b = strdup(a);

      printf("b[]=\"%s\"\n", b);  //显示: b[]="strdup"

8、strrev()

此函数的原型为char *strrev(char *str)
功能为反转字符串,返回字符串指针。
函数实现:

char  *my_strrev(char *str)
{
  char  temp;
  char  *start = str;
  char  *end = str+strlen(str)-1;

  if(str==NULL)
    return(NULL);

  while(start<end)
  {
    temp = *start;
    *start = *end;
    *end = temp;

    start++;
    end--;
  }    

  return(str);
}

  效果:

    char arr1[20]="abcdef";  

    printf("%s\n",my_strrev(arr1)); //显示fedcba

9、strstr()

函数原型为char *strstr(const char str1, const char *str2)
功能为查找字符串str2在str1中出现的位置,找到则返回位置,否则返回NULL。
函数实现:
char *strstr(const char str1, const char *str2)
{
    int length1=strlen(str1);
    int length2=strlen(str2);
    while(length1>=length2)
    {
        length1--;
        if(!strncpy(str1,str2,length2))//比较前n个字符串,类似strcpy
            return str1;
        str1++;
    }
    return NULL;
}  

自己编写的str操作函数的更多相关文章

  1. PHP常用的文件操作函数集锦

    以下是个人总结的PHP文件操作函数.当然,这只是部分,还有很多,我没有列出来. 一 .解析路径: 1 获得文件名:basename();给出一个包含有指向一个文件的全路径的字符串,本函数返回基本的文件 ...

  2. 嵌入式 python之str操作

    1.字符串的对齐方式:①:center(int[,str])>>> string = 'Fishhat'>>> string.center(55)'         ...

  3. LoadRunner中常用的字符串操作函数

    LoadRunner中常用的字符串操作函数有:                strcpy(destination_string, source_string);               strc ...

  4. dedecms功能性函数封装(XSS过滤、编码、浏览器XSS hack、字符操作函数)

    dedecms虽然有诸多漏洞,但不可否认确实是一个很不错的内容管理系统(cms),其他也不乏很多功能实用性的函数,以下就部分列举,持续更新,不作过多说明.使用时需部分修改,你懂的 1.XSS过滤. f ...

  5. JavaScript中常见的字符串操作函数及用法

    JavaScript中常见的字符串操作函数及用法 最近几次参加前端实习生招聘的笔试,发现很多笔试题都会考到字符串的处理,比方说去哪儿网笔试题.淘宝的笔试题等.如果你经常参加笔试或者也是一个过来人,相信 ...

  6. js原生的url操作函数,及使用方法。(附:下边还有jquery对url里的中文解码函数)

    js原生的url操作函数,完善的. /*****************************/ /* 动态修改url */ /*****************************/ var ...

  7. Effective C++ 之 Item 5:了解C++默默编写并调用哪些函数

    Effective C++ chapter 2. 构造 / 析构 / 赋值运算 (Constructors, Destructors, and Assignment Operators) Item 5 ...

  8. Linux 多线程应用中如何编写安全的信号处理函数

    http://blog.163.com/he_junwei/blog/static/1979376462014021105242552/ http://www.ibm.com/developerwor ...

  9. Runtime机制之结构体及操作函数

    一.动态语言 Objective-C语言是一门动态语言,它将很多静态语言在编译和链接时期做的事放到了运行时来处理.这种动态语言的优势在于:具有灵活性,比如:消息转发,方法交换等.它有一个运行时系统Ob ...

随机推荐

  1. [BZOJ2462] [BeiJing2011]矩阵模板(二维Hash)

    传送门 二维哈希即可. 注意质数选的大一些,不然会超时. 还有插入的时候不判重居然比判重要快.. ——代码 #include <cstdio> int main() { ; ") ...

  2. poj 3648 2-sat 输出任意一组解模板

    转载地址:http://blog.csdn.net/qq172108805/article/details/7603351 /* 2-sat问题,题意:有对情侣结婚,请来n-1对夫妇,算上他们自己共n ...

  3. Thinkphp5.0 的使用模型Model更新数据

    Thinkphp5.0 的使用模型Model更新数据 (1)使用update()方法进行更新数据 一.where条件写在更新数据中 (这种情况更新的数据,必须含主键) $res = User::upd ...

  4. cogs——2419. [HZOI 2016]公路修建2

    2419. [HZOI 2016]公路修建2 ★☆   输入文件:hzoi_road2.in   输出文件:hzoi_road2.out   简单对比时间限制:1 s   内存限制:128 MB [题 ...

  5. 在 IIS 中承载 WCF 服务

    本主题概述了创建 Internet 信息服务 (IIS) 中承载的 Windows Communication Foundation (WCF) 服务所需的基本步骤. 本主题假设您熟悉 IIS 且了解 ...

  6. 如何使用TFTP客户端工具修复路由器固件

    如何使用TFTP客户端工具修复路由器固件 编号:12083       来自:NetGear       更新日期:2013-10-14       访问数量:24650 NETGEAR无线路由器中, ...

  7. Sockets Tutorial

    Sockets Tutorial This is a simple tutorial on using sockets for interprocess communication. The clie ...

  8. [VueJS + Typescript] Decouple Dependencies Using IoC Containers in Vue with TypeScript and InversifyJS

    Using Object Oriented Programming, OOP, style allows us to apply Inversion of Control, IoC, and more ...

  9. CSS 全部的列表样式类型

    <html> <head> <style type="text/css"> ul.none {list-style-type: none} ul ...

  10. 【bzoj3676】[Apio2014]回文串 —— 回文自动机的学习

    写题遇上一棘手的题,[Apio2014]回文串,一眼看过后缀数组+Manacher.然后就码码码...过是过了,然后看一下[Status],怎么慢这么多,不服..然后就搜了一下,发现一种新东西——回文 ...