字符串[3]:自定义函数实现字符串API操作(2)

原创首发于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;
}

运行结果:
myStrlwr.c

|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;
}

运行结果:
myStrupr.c

|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;
}

运行结果:
myStrchr.c

|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」
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值