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. Uva -1515 Pool construction(最小割)

    输入一个字符矩阵,'.'代表洞,'#'代表草地.可以把草改成洞花费为d,或者把洞改成草花费为f,最后还要在草和洞之间修围栏花费为b. 首先把最外一圈的洞变成草,并累加花费. 增加一个源点和一个汇点,源 ...

  2. Eclipse替换find/Replace

    使用快捷键:ctrl+F       replaceAll

  3. UUID使用

    import java.util.UUID; public static String getUUID() { UUID uuid =UUID.randomUUID(); String str = u ...

  4. 洛谷 P1555 尴尬的数字

    P1555 尴尬的数字 题目背景 Bessie刚刚学会了不同进制数之间的转换,但是她总是犯错误,因为她的两个前蹄不能轻松的握住钢笔. 题目描述 每当Bessie将一个数转换成新的进制时,她总会写错一位 ...

  5. HTML学习之Flex 布局

    一.Flex 布局是什么? Flex 是 Flexible Box 的缩写,意为"弹性布局",用来为盒状模型提供最大的灵活性. 任何一个容器都可以指定为 Flex 布局. .box ...

  6. java生成xml

    import java.io.File;import java.io.FileOutputStream;import java.text.SimpleDateFormat;import java.ut ...

  7. atom的react自动补全插件

    atom-react-autocomplete–项目内,组件名及状态的自动补全 autocomplete-js-import–模块导入智能提示 emmet-jsx-css-modules– React ...

  8. laralvel 关系多对多

  9. FlashChart json数据配置 中文文档

    http://www.riaos.com/ria/2274 FlashChart json数据配置说明 有朋友要用flashchart,感觉这个还不错.就整理了一份文档. 基本包括了所有json配置的 ...

  10. golang convert integer to float number

    There is no float type. Looks like you want float64. You could also use float32 if you only need a s ...