原创首发于CSDN,转载请注明出处,谢谢!
前言
对于笔者上一篇博客 字符串 [2]:定义函数实现字符串API操作(1) 所遗留的6个字符串函数的补充。
自定义函数实现字符串API操作(2)
|strlwr() —— myStrlwr()
函数原型:
#include <stdio.h>
char *strlwr(char *src);
演示代码: myStrlwr.c
/* myStrlwr.c */
#include <stdio.h>
#include <ctype.h>//抽空研究下 ctype.h 这个头文件。
char *myStrlwr(char *p)
{
int i = 0;
while(p[i] != '\0'){
//int tolower(int c),字符转换为小写字符。
putchar(tolower(p[i]));
i++;
}
}
int main()
{
char str[] = "ABCDE";
printf("%s\n",str);
myStrlwr(str);
putchar('\n');
return 0;
}
运行结果:
|strupr() —— myStrupr()
函数原型:
#include <stdio.h>
char *strupr(char *src);
演示代码: myStrupr()
/* myStrupr.c */
#include <stdio.h>
#include <ctype.h>
char *myStrupr(char *p)
{
int i = 0;
while(p[i] != '\0')
{
//int toupper(int c)
//字符转换为大写字符。
putchar(toupper(p[i]));
i++;
}
}
int main()
{
char str[] = "abcde";
printf("%s\n",str);
myStrupr(str);
putchar('\n');
return 0;
}
运行结果:
|strchr() —— myStrchr()
函数原型:
#include <stdio.h>
char *strchr(char *src, const char c);
演示代码: myStrchr.c
/* myStrchr.c */
#include <stdio.h>
#include <string.h>
char *myStrchr(char *str, char c)
{
while(*str != '\0' && *str != c){
str++;
}
if(*str == c){
return (char *)str;
}else{
return NULL;
}
}
int main()
{
char p[] = "abcde";
char ch1 = 'c';
char ch2 = 'b';
char *ret = NULL;
ret = strchr(p,ch1);
if(ret == NULL){
printf("The char ch1 does not exist.\n");
}else{
printf("strchr ch1: %s\n",ret);
}
ret = myStrchr(p,ch2);
if(ret == NULL){
printf("The char ch2 does not exist.\n");
}else{
printf("myStrchr ch2: %s\n",ret);
}
return 0;
}
运行结果:
|strstr() —— myStrstr()
函数原型:
#include <stdio.h>
char *strstr(const char *haystack, const char *needle) ;
演示代码: myStrstr.c
#include <stdio.h>
#include <string.h>
char *myStrstr(char *dest, char *src)
{
char *a = dest;
char *b = src;
char *ptr = NULL;
//控制三个指针统一步调,内容被控制为一个字符串内容。
//好残暴的写法。
while(*a != '\0')
{
ptr = a;
while((*a != '\0') && (*b != '\0') && (*a == *b))
{
a++;
b++;
}
if(*b == '\0'){
return (char *)ptr;
}
a = ptr + 1;
b = src;
}
}
int main()
{
char str[] = "hello,world!";
char substr1[] = "wor";
char substr2[] = "ll";
char *ret = NULL;
ret = strstr(str,substr1);
if(ret == NULL){
printf("No exist.\n");
}else{
printf("strstr(str,substr1): %s\n",ret);
}
ret = myStrstr(str,substr2);
if(ret == NULL){
printf("No exist.\n");
}else{
printf("myStrstr(str,substr2): %s\n",ret);
}
return 0;
}
运行结果:
|strcmp() —— myStrcmp()
推荐阅读的博客(建议收藏):strcmp函数实现及分析
|strtok() —— myStrtok()
推荐阅读的博客(建议首收藏):strtok()函数的实现
|字符串逆序(inverse Order)
演示代码: inverse.c
/* inverse.c */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void inverse(char str[])
{
int begin;
int end;
char tmp;
begin = 0;
end = strlen(str) - 1;
while(begin < end)
{
tmp = str[begin];
str[begin] = str[end];
str[end] = tmp;
end--;
begin++;
}
}
int main()
{
//char str[128] = {'\0'};
char *str = NULL;
str = (char *)malloc(128);
memset(str,'\0',128);
printf("Input your string:\n");
scanf("%s",str);
inverse(str);
puts("Inverse Order:");
printf("%s\n",str);
return 0;
}
参考资料
更新时间记录
- 文章整体框架搭好。 「2021.5.3 8:27」
- 各个函数的框架搭好。「2021.5.3 18:24」
- “strlwr() —— myStrlwr()”一节完成。 「2021.5.3 21:45」
- “strupr() —— myStrupr()”一节完成。 「2021.5.3 22:00」
- “strchr() —— myStrchr()”一节完成。 「2021.5.4 14:45」
- “strstr() —— myStrstr()”一节完成。 「2021.5.4 20:20」
- 关于函数 strcmp() 、strtok() 的实现直接点击博文链接。 「2021.5.5 13:56」
- 增加“字符串 Inverse Order”一节。 「2021.6.23 21:51」
- 修改文章标题格式,修改部分段落内容。「2024.3.27 11:25」