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”,后者是字 ...
随机推荐
- caffe(9) caffe例子
为了程序的简洁,在caffe中是不带练习数据的,因此需要自己去下载.但在caffe根目录下的data文件夹里,作者已经为我们编写好了下载数据的脚本文件,我们只需要联网,运行这些脚本文件就行了. 注意: ...
- 【转】 java RSA加密解密实现
[转] java RSA加密解密实现 该工具类中用到了BASE64,需要借助第三方类库:javabase64-1.3.1.jar 下载地址:http://download.csdn.net/detai ...
- 八 rowkey设计 几种方法
简单来讲,rowkey就是 KeyValue 中的key rowkey设计之 尽量散列设计 RowKey 如第三部分第六中讲到,如果数据都是有序的存储到一个特定的范围内,将会存 ...
- ArcGIS api for javascript——鼠标悬停时显示信息窗口
描述 本例展示当用户在要素上悬停鼠标时如何显示InfoWindow.本例中,要素是查询USA州图层的QueryTask的查询结果.工作流程如下: 1.用户单击一个要素 2.要素是“加亮的”图形. 3. ...
- 赋值、复制构造函数和构造函数 & 异常安全的赋值
异常安全的赋值 需要注意,复制赋值和复制构造,相兼容. 赋值时候,要带上自检查.
- Unity multiplayer
using UnityEngine; using System.Collections; public class multiplayer_Button : MonoBehaviour { void ...
- Id选择器和Class选择器
http://www.runoob.com/css/css-id-class.html http://www.w3school.com.cn/css/css_syntax_id_selector.as ...
- netsh http的使用
1.首先通过cmd进入 C:\Windows\System32\inetsrv>netshnetsh>http netsh http> 退出的时候,使用exit命令 2.显示监听的i ...
- axure中使用HighCharts模板制作统计图表
一. 步骤: 1.在axure中新建页面,发布并生成html文件: 2.将HighCharts文件夹,拷贝到生成的html文件中: 3.拖拽“内部框架组件”到界面中 4.双击界面中的内部框架,设置链接 ...
- c#(asp.net) 如何计算两个日期之间相隔天数
1.DateTime t1 = Convert.ToDateTime("2006-1-6"); DateTime t2 = Convert.ToDateTime("200 ...