1.自己实现三个常用函数 strlen,strcpy,strstr

  • 自己实现strstr函数,如果找到返回首地址,找不到则返回NULL
 //查找元素,返回首地址
char *mystrstr(const char *_Str,const char *_SubStr)
{
//如果有一个为空,则返回NULL
if (_Str == NULL || _SubStr == NULL)
{
return NULL;
} //psrc,psub保存源字符串和子字符串当前查询到的地址
char *psrc = _Str;
char *psub = _SubStr; //如果源字符串没有遍历晚,则继续遍历
while (*psrc != '\0')
{
//创建新的临时地址,保存当前遍历到的地址
char *ptmp_src = psrc;
char *ptmp_sub = psub;
int flag = ;//首先假设字符串找到
//如果自字符串没有遍历完,则继续遍历
while (*ptmp_sub != '\0')
{
//如果源字符串提前结束,则返回NULL
if (*ptmp_src == '\0')
{
return NULL;
}
//如果当前遍历到的不相等,则flag置0,跳出循环
if (*ptmp_src != *ptmp_sub)
{
flag = ;
break;
}
else//否则同时向后移动一位
{
ptmp_src++;
ptmp_sub++;
}
}
//如果找到了返回首地址
if (flag)
{
return psrc;
}
//如果没找到源字符串向后移动一位,再进行遍历
psrc++;
} return NULL;
}
  • 自己实现strlen函数
 unsigned int mystrlen(const char *str)
{
int length = ;
for (int i = ;; i++)
{
if (*(str + i) == '\0')
{
break;
}
length++;
}
return length;
}
  • 自己实现strcpy函数
 char *mystrcpy(char *dest, const char *source)
{
if (dest == NULL || source == NULL)
{
return NULL;
}
for (int i = ;; i++)
{
dest[i] = source[i];
if (*(source + i) == '\0')
{
break;
} return dest;
}
}

 2.字符串的排序以及自己实现strcmp

  • 字符串的排序调用qsort
 int compare(const void *p1, const void *p2)//传递的是数组元素的地址,类型是**,要先转化为**的指针
{
const char **pstr1 = p1;
const char **pstr2 = p2;
//去每个元素首地址比较两个字符串
return strcmp(*pstr1, *pstr2);
} void main()
{
char *str[] = { "calc","apple","run","" ,"boat","dead","father","son","hello",""};
qsort(str, , , compare);
for (int i = ; i < ; i++)
{
puts(str[i]);
}
system("pause");
}
  • 字符串的排序,冒泡法
 void main()
{
char str[][] = { "calc","apple","run","" ,"boat","dead","father","son","hello","" }; for (int i = ; i < - ; i++)//控制次数
{
for (int j = ; j < - i - ; j++)//两个两个比较,大数沉底
{
if (strcmp(str[j], str[j + ]) > )
{
char strtemp[] = { };
strcpy(strtemp, str[j]);
strcpy(str[j], str[j + ]);
strcpy(str[j + ], strtemp);
} }
}
for (int i = ; i < ; i++)
{
puts(str[i]);
}
system("pause");
}
  • 自己实现strcmp
 int mystrcmp(const char * _Str1, const char * _Str2)
{
if (_Str1 == NULL || _Str2 == NULL)
{
return ;
}
char *pstr1 = _Str1;
char *pstr2 = _Str2;
//一直循环到两个字符不相等
while (*pstr1 == *pstr2 && *pstr1 != '\0')
{
pstr1++;
pstr2++;
}
//如果都到两个字符串结尾
if (*pstr1 == '\0' && *pstr2 == '\0')
{
return ;
}
//如果有一个到结尾
else if (*pstr1 == '\0' && *pstr2 != '\0')
{
return -;
}
else if (*pstr1 != '\0' && *pstr2 == '\0')
{
return ;
}
//如果都没到结尾
else
{
return *pstr1 > *pstr2 ? : -;
}
}

不常用的字符串函数 

  • 自己实现strset(char *p,char ch):填充字符串

     void mystrset(char *p, char ch)
    {
    while (*p!=NULL)
    {
    *p = ch;
    p++;
    } }
  • 自己实现strrev(char *p)
     void mystrrev(char *p)
    {
    int len = strlen(p);
    for (int i = ; i < len/; i++)
    {
    p[i] = p[len - -i];
    }
    }
  • 自己实现_strlwr(字符串大写转小写)
     void mystrlwr(char *p)
    {
    while (*p != '\0')
    {
    if (*p >= 'A' && *p <= 'Z')
    {
    (*p) += ;
    }
    p++;
    }
    }
  • 自己实现_strupr(字符串小写转大写)
     void mystrupr(char *p)
    {
    while (*p != '\0')
    {
    if (*p >= 'a' && *p <= 'z')
    {
    (*p) -= ;
    }
    p++;
    }
    }

38.C语言字符串总结的更多相关文章

  1. C.【转】C语言字符串与数字相互转换

    1.gcvt 把浮点数转成字符串 - CSDN博客.html(https://blog.csdn.net/dxuehui/article/details/52791412) 1.1. 函数名: gcv ...

  2. C语言字符串操作总结大全(超详细)

    本篇文章是对C语言字符串操作进行了详细的总结分析,需要的朋友参考下 1)字符串操作  strcpy(p, p1) 复制字符串  strncpy(p, p1, n) 复制指定长度字符串  strcat( ...

  3. C语言字符串拷贝

    C语言字符串拷贝利用指针操作,要清楚知道指针的指向 代码如下: #include <stdio.h> #include <assert.h> #include <stri ...

  4. C语言字符串长度(转)

    C语言字符串长度的计算是编程时常用到的,也是求职时必考的一项. C语言本身不限制字符串的长度,因而程序必须扫描完整个字符串后才能确定字符串的长度. 在程序里,一般会用strlen()函数或sizeof ...

  5. C语言字符串操作常用库函数

    C语言字符串操作常用库函数 *********************************************************************************** 函数 ...

  6. c语言字符串操作大全

     C语言字符串操作函数 函数名: strcpy 功  能: 拷贝一个字符串到另一个 用  法: char *stpcpy(char *destin, char *source); 程序例: #incl ...

  7. 转:C语言字符串操作函数 - strcpy、strcmp、strcat、反转、回文

    转自:C语言字符串操作函数 - strcpy.strcmp.strcat.反转.回文 C++常用库函数atoi,itoa,strcpy,strcmp的实现 作者:jcsu C语言字符串操作函数 1. ...

  8. C 语言字符串连接的 3种方式

    C 语言字符串连接的 3种方式 #include<stdio.h> #include<stdlib.h> #include<string.h> char *join ...

  9. C语言字符串声明

    重新学习C语言字符串声明char *a="nihao";char a[]="nihao";什么区别?前者定义的是指针,并且指向字符串常量“nihao”,后者是字 ...

随机推荐

  1. IDEA中FindBugs编码规范工具使用

    IDEA中安装FindBugs插件: file--Settings--Plugins 在Plugins搜索FindBugs: 安装完成后在项目中选中文件右键找到findBugs: 检查代码结果: 按照 ...

  2. MySQL格式化日期参数

    MySQL格式化日期参数 %a 缩写星期名 %b 缩写月名 %c 月,数值 %D 带有英文前缀的月中的天 %d 月的天,数值(00-31) %e 月的天,数值(0-31) %f 微秒 %H 小时 (0 ...

  3. 关于H5中 input消除默认,取消在手机上的点击高亮效果

    input消除默认,代码如下    input{             -webkit-tap-highlight-color: rgba(255, 255, 255, 0);            ...

  4. twig 模板引擎使渲染视图更加优雅

    在使用 laravel 的时候接触过 blade 模板引擎.在学习的时候,接触到了另外一个强大的模板引擎:twig 官网:https://twig.sensiolabs.org/ 中文手册:http: ...

  5. php八大设计模式之桥接模式

    一个抽象产生多种具体的实现方式,单纯的通过子类继承会有子类爆炸(过多的子类产生)的现象,系统需要它们之间进行动态耦合. 面向过程: <?php header("content-type ...

  6. django 在非空的字段里插入现象表述

    1.char 类型设置为非空 对于字段不赋值 默认储存为''(空字符串) 2.int 类型设置为非空 对于字段不赋值 单条插入 报错        多条数据同时插入 默认设置为0

  7. USART

    串口通信是一种设备间非常常用的串行通行方式,其简单便捷,大部分电子设备都支持. 一.物理层 常用RS-232标准,主要规定了信号的用途.通信接口以及信号的电平标准.  “DB9接口”之间通过串口信号线 ...

  8. 01-JS起步

    01-JS起步

  9. poj 2533 Longest Ordered Subsequence 最长递增子序列(LIS)

    两种算法 1.  O(n^2) #include<iostream> #include<cstdio> #include<cstring> using namesp ...

  10. 进程:linux用户态-内核态

    用户态:Ring3运行于用户态的代码则要受到处理器的诸多检查,它们只能访问映射其地址空间的页表项中规定的在用户态下可访问页面的虚拟地址,且只能对任务状态段(TSS)中I/O许可位图(I/O Permi ...