38.C语言字符串总结
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语言字符串总结的更多相关文章
- C.【转】C语言字符串与数字相互转换
1.gcvt 把浮点数转成字符串 - CSDN博客.html(https://blog.csdn.net/dxuehui/article/details/52791412) 1.1. 函数名: gcv ...
- C语言字符串操作总结大全(超详细)
本篇文章是对C语言字符串操作进行了详细的总结分析,需要的朋友参考下 1)字符串操作 strcpy(p, p1) 复制字符串 strncpy(p, p1, n) 复制指定长度字符串 strcat( ...
- C语言字符串拷贝
C语言字符串拷贝利用指针操作,要清楚知道指针的指向 代码如下: #include <stdio.h> #include <assert.h> #include <stri ...
- C语言字符串长度(转)
C语言字符串长度的计算是编程时常用到的,也是求职时必考的一项. C语言本身不限制字符串的长度,因而程序必须扫描完整个字符串后才能确定字符串的长度. 在程序里,一般会用strlen()函数或sizeof ...
- C语言字符串操作常用库函数
C语言字符串操作常用库函数 *********************************************************************************** 函数 ...
- c语言字符串操作大全
C语言字符串操作函数 函数名: strcpy 功 能: 拷贝一个字符串到另一个 用 法: char *stpcpy(char *destin, char *source); 程序例: #incl ...
- 转:C语言字符串操作函数 - strcpy、strcmp、strcat、反转、回文
转自:C语言字符串操作函数 - strcpy.strcmp.strcat.反转.回文 C++常用库函数atoi,itoa,strcpy,strcmp的实现 作者:jcsu C语言字符串操作函数 1. ...
- C 语言字符串连接的 3种方式
C 语言字符串连接的 3种方式 #include<stdio.h> #include<stdlib.h> #include<string.h> char *join ...
- C语言字符串声明
重新学习C语言字符串声明char *a="nihao";char a[]="nihao";什么区别?前者定义的是指针,并且指向字符串常量“nihao”,后者是字 ...
随机推荐
- SSRS 报表 如何匿名查看
SSRS 报表 如何匿名查看 昨晚一直研究怎么能匿名访问报表然后给客户看呢? 研究了好几种办法 我试过的分为三种,其中推荐我认为相对可控一点. .修改SSRS配置文件来禁止他验证登陆用户权限 操作过的 ...
- RMAN动态视图
1.V$ARCHIVEG_LOG 显示归档文件在数据库中创建.备份.清除 2.V$BACKUP_CORRUPTION 显示当一个备份集备份时块中发现的坏块 3.V$COPY_CORRUPTION 显示 ...
- button click event in jqxgrid jqwidgets
button click event in jqxgrid jqwidgets http://www.jqwidgets.com/jquery-widgets-demo/demos/jqxgrid/p ...
- Mac上vmware虚拟机Windows10安装Tomcat8.0及配置环境
1.下载tomcat8.0或其他版本.下载地址:http://tomcat.apache.org/download-80.cgi 2.双击进行解压. 3.安装成功之后,右键我的电脑 --> 选择 ...
- bzoj2763 [JLOI]飞行路线 分层图最短路
问题描述 Alice和Bob现在要乘飞机旅行,他们选择了一家相对便宜的航空公司.该航空公司一共在n个城市设有业务,设这些城市分别标记为0到n-1,一共有m种航线,每种航线连接两个城市,并且航线有一定的 ...
- 记intel杯比赛中各种bug与debug【其一】:安装intel caffe
因为intel杯创新软件比赛过程中,并没有任何记录.现在用一点时间把全过程重演一次用作记录. 学习 pytorch 一段时间后,intel比赛突然不让用 pytoch 了,于是打算转战intel ca ...
- 今日SGU 5.27
SGU 122 题意:给你n个人,每个人有大于 N / 2(向上取整)的朋友,问你1这个人有一个书,每个人都想看,只能从朋友之间传递,然后最后回到了1这个人,问你 是否有解,然后有解输出路径 收获:哈 ...
- Testin实验室:陌陌APP通过率为94.92% 基本满足移动社交需求
Testin实验室:陌陌APP通过率为94.92% 基本满足移动社交需求 2014/11/10 · Testin · 独家评測 11月8日,国内移动社交应用陌陌公开向美国证券交易委员会提交了IPO申请 ...
- [递推+dfs]ZOJ 3436. July Number
题目大意: 将一个数字的相邻两位的差(的绝对值)组成一个新的数字.不断反复.假设最后得到7,就称这个数为July Number,比方9024 – 922 – 70 – 7. 题目要求1e9范围内给定区 ...
- legend---七、jquery如何选中select的selected的选择上的自定义属性
legend---七.jquery如何选中select的selected的选择上的自定义属性 一.总结 一句话总结:用冒号属性选择器 var type=$(this).children('option ...